Из исходная документация :
ArgumentError: Исключение, создаваемое объектами ArgumentParser при возникновении ошибок в действиях анализатора.Ошибки, возникающие при синтаксическом анализе командной строки, перехватываются ArgumentParser и отправляются в виде сообщений командной строки.
Параметр argument
конструктора - это объект Action
, из которого возникает исключение.Обычно нет необходимости поднимать его за пределы подкласса Action
, а при создании подкласса нет необходимости явно поднимать его;вместо этого вы обычно повышаете ValueError
(или все, что подходит).
Значения с плавающей запятой в диапазоне от 0 до 1
Что касается вашего комментария, вы хотите принимать значения с плавающей запятой только в диапазоне от 0 до1. Для этого вы должны использовать возможность определения пользовательских типов.Например, вы можете сделать это следующим образом:
def percentFloat (string):
value = float(string)
if value < 0 or value > 1:
raise argparse.ArgumentTypeError('Value has to be between 0 and 1')
return value
parser = argparse.ArgumentParser()
parser.add_argument('test', type=percentFloat)
parser.parse_args()
Обратите внимание, что это также безопасно для non-float, так как float(string)
поднимет ValueError
для non-float, что также вызовет ошибку недопустимого типа:модуль argparse
.ArgumentTypeError
- это просто способ указать пользовательское сообщение об ошибке.
Взаимоисключающие параметры
Для взаимоисключающих параметров следует использовать argparse.add_mutually_exclusive_group
.
Зависимость параметров
Зависимость параметров на самом деле не то, что следует делать с помощью аргумента parser .Для семантических деталей вы должны вместо этого просто сделать это самостоятельно:
args = parser.parse_args()
if args.w and not args.p:
parser.error('-p is required when -w is set.')
Вы можете использовать ArgumentParser.error
, чтобы вызвать пользовательское сообщение об ошибке, которое прервет программу и выведет ее на консоль.
Но, конечно, в такой базовой ситуации было бы гораздо разумнее просто безоговорочно угадать -p
, если это возможно.