Здравствуйте.
Хочу сделать скрипт с возможностью управления аргументами, передаваемыми из командной строки. Использую для этого модуль argparse. На простом тестовом примере столкнулся с тем, что не понимаю как обработать None для тех аргументов, которые не были переданы в конкретный вызов.
У скрипта есть поведение по умолчанию, если аргументы не были переданы совсем. Потом уже идет их вызов. Но если хотя бы один дан не был, то я получаю логичную ошибку о том, что None в таком-то и таком-то случае использовать нельзя.
Собственно, вопрос: как организовать проверку сего момента? Или мною был выбран вовсе неправильный подход?
import argparse
import json
import sys
def add_item(string):
k, v = string.split(",")
with open("test.json", "r", encoding="utf8") as in_file:
db = json.load(in_file)
if k in db:
db[k] = v
else:
db[k] = v
with open("test.json", "w", encoding="utf8") as out_file:
json.dump(db, out_file, ensure_ascii=False)
def check_item(string):
with open("test.json", "r", encoding="utf8") as in_file:
db = json.load(in_file)
if string in db:
print(db[string])
else:
print("Don't found key: " + string)
parser = argparse.ArgumentParser()
parser.add_argument('-a', '--add', action='store', dest='add_value',
help='Add value to dictionary')
parser.add_argument('-v', '--value', action='store', dest='check_value',
help='Check value in dictionary')
if __name__ == "__main__":
namespace = parser.parse_args(sys.argv[1:])
if not len(sys.argv) > 1:
with open("test.json", "r", encoding="utf8") as in_file:
database = json.load(in_file)
for key, value in database.items():
print(key + " - " + value)
else:
add_item(namespace.add_value)
check_item(namespace.check_value)