2016-10-14 6 views
1

После того, как я создал свой парсер аргументов. Как проверить, содержит ли парсер правило для аргумента. Вот какой код, чтобы объяснить, что я имею в виду.Как проверить, содержит ли аргумент ArgumentParser аргумент?

from argparse import ArgumentParser 

parser = ArgumentParser() 
parser.add_argument('--foo') 
parser.add_argument('--bar') 

'foo' in parser 
# => True 
'bar' in parser 
# => True 
'baz' in parser 
# => False 

Короче говоря, я хочу знать, существует ли аргумент в синтаксическом анализаторе.

Как часть инициализации моей программы, я загружаю несколько файлов конфигурации. Если в файлах конфигурации есть параметры, которых нет в синтаксическом анализаторе, я хочу предупредить пользователя.

+1

http://stackoverflow.com/questions/39996295/correct-way-to -get-allowed-arguments-from-argumentparser должен помочь. – hpaulj

+0

@hpaulj Спасибо! Я не знаю, почему этот вопрос не появился, когда я искал. Я отметил это как дубликат. – Annan

ответ

0

Это немного неуклюжим, но вы можете запустить parse_args с не аргументами и извлечь ключи для результирующего Namespace объекта:

>>> 'foo' in vars(parser.parse_args()) 
True 
>>> 'baz' in vars(parser.parse_args()) 
False 
+0

Спасибо, что ответили. Одна из проблем с этим в моем случае заключается в том, что я использую 'default = argparse.SUPPRESS', поэтому настройки, которые пользователь не указывает, не будут перезаписывать файлы конфигурации. Я закрыл вопрос, поскольку он кажется дублирующим, - и у другого вопроса есть довольно много ответов. – Annan