2016-09-06 4 views
0

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

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) 

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

+0

Есть другие SO вопросы о преобразовании 'argparse' аргументы в 'kwargs', или принимать словарь как входы, которые могут быть переданы. Ваш аргумент 'options' просто создает список строк. – hpaulj

+0

Об использовании 'argparse' с' kwargs': http://stackoverflow.com/questions/33712615/using-argparse-with-function-that-takes-kwargs-argument – hpaulj

ответ

3

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

parser.add_argument("-o", "--options", nargs="+", default=[]) 
1

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

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

или если заявление

if 'option' in kwargs: 
    pass # do something