Я'd, как использовать исключение ArgumentError
в argparse
модуль в Python, но я могу'т выяснить, как использовать его. Подпись говорит, что это должно называться `ArgumentError(рассуждение, сообщение), но я могу'т выяснить, что "аргумент" должен быть. Я думаю, что это должна быть какая-то часть объекта парсера, но я не мог'т найти любую документацию на это.
Из исходной документации](https://hg.python.org/cpython/file/v3.5.2/Lib/argparse.py#l34):
ArgumentError: за исключением, поднятые объекты ArgumentParser при наличии ошибок парсера'ы действия. Ошибки, возникающие при разборе командной строки попадутся на ArgumentParser и выбрасывается в виде командной строки сообщений.
Этот "аргумент" параметр конструктора является объект "действие", из которой вызывается исключение. Как правило, нет необходимости поднимать его за "действием" подкласс, и при наследовании он, нет никакой необходимости явно поднять его; обычно поднимают ValueError
(или как там это уместно), а не.
Что касается вашего комментария, что вы только хотите принять плавающей запятой между 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()
Обратите внимание, что это также безопасно в отношении не плавает как поплавок(строка)поднимет
ValueErrorдля некурящих, поплавки которой также вызывает недопустимую ошибку типа
argparseмодуль. [
ArgumentTypeError`](https://hg.python.org/cpython/file/v3.5.2/Lib/argparse.py#l725) это просто способ, чтобы указать пользовательское сообщение об ошибке.
Для взаимоисключающих параметров, вы должны использовать 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
для повышения пользовательского сообщения об ошибке, который будет прерывать программу и распечатать на консоль.
Но, конечно, в такой ситуации это было бы сделать намного больше смысла, чтобы просто неявно предполагаю -П
, если это возможно.
В то время как парсер.ошибка () является то, что большинство людей, вероятно, хотите, также можно использовать argparse.ArgumentError() (как вопрос задает.) Вам нужна ссылка на аргумент, как bar_arg
в примере ниже:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
bar_arg = parser.add_argument('--bar')
args = parser.parse_args()
if args.bar == 'xyzzy':
raise argparse.ArgumentError(bar_arg, "Can't be 'xyzzy'")
if args.foo == 'xyzzy':
parser.error("Can't be 'xyzzy'")
Этот результат, как показано ниже:
в
$ python argparse_test.py --foo xyzzy
usage: argparse_test.py [-h] [--foo FOO] [--bar BAR]
argparse_test.py: error: Can't be 'xyzzy'
$ python argparse_test.py --bar xyzzy
Traceback (most recent call last):
File "argparse_test.py", line 10, in <module>
raise argparse.ArgumentError(bar_arg, "Can't be 'xyzzy'")
argparse.ArgumentError: argument --bar: Can't be 'xyzzy'