Обработка необязательных аргументов Python argaprse

Итак, у меня есть скрипт на Python для разбора и отображения данных из текстовых файлов. Обработка аргументов осуществляется с помощью модуля argparse. Проблема в том, что некоторые аргументы являются необязательными, например. один из них используется для добавления текстовых аннотаций на график. Этот аргумент отправляется функции построения графика через **kwargs. Мой вопрос: каков самый питонический способ обработки этих необязательных аргументов? Какой-то псевдокод здесь:

parser = argparse.ArgumentParser()
...
parser.add_argument("-o", "--options", nargs="+", help="additional options")
args = parser.parse_args()
...
def some_function(arguments, **kwargs):
   doing something with kwargs['options']
   return something
...
arguments = ...
some_function(arguments, options=args.options)

Если параметры не указаны, по умолчанию присваивается значение None. И это вызывает некоторые проблемы. Что более питонично - как-то проверить «опции» в some_function? Или, может быть, разобрать аргументы перед вызовом some_function?


person michal_2am    schedule 06.09.2016    source источник
comment
Есть и другие вопросы SO о преобразовании argparse аргументов в kwargs или о принятии словаря, такого как входные данные, которые могут быть переданы. Ваш аргумент options просто создает список строк.   -  person hpaulj    schedule 06.09.2016
comment
При использовании argparse с kwargs: stackoverflow.com/questions/33712615/   -  person hpaulj    schedule 06.09.2016


Ответы (2)


Вы можете просто указать явный пустой список по умолчанию.

parser.add_argument("-o", "--options", nargs="+", default=[])
person chepner    schedule 06.09.2016

используйте get и установите значение по умолчанию, если ключ не найден в dict

def some_function(arguments, **kwargs):
   something = kwargs.get('options', 'Not found')
   return something

или оператор if

if 'option' in kwargs:
    pass # do something
person danidee    schedule 06.09.2016