Ответ 1
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()
Обратите внимание, что это также безопасно против неплавающих, поскольку float(string)
поднимет значение ValueError
для не-float, которое также вызывает ошибку недопустимого типа модулем argparse
. ArgumentTypeError
- это просто способ указать настраиваемое сообщение об ошибке.
Взаимоисключающие параметры
Для взаимоисключающих параметров вы должны использовать argparse.add_mutually_exclusive_group
.
Зависимость параметров
Зависимость параметров не является чем-то, что должно быть сделано парсером аргументов. Для семантических деталей вы должны просто сделать это самостоятельно:
args = parser.parse_args()
if args.w and not args.p:
parser.error('-p is required when -w is set.')
Вы можете использовать ArgumentParser.error
для повышения пользовательского сообщения об ошибке, которое прерывает программу и печатает на консоль.
Но, конечно, в такой базовой ситуации было бы гораздо больше смысла просто неявно угадать -p
, если это возможно.