我想在Python ArgumentError中的argparse模块中使用异常,但我无法弄清楚如何使用它.签名说它应该被称为ArgumentError(argument, message),但我无法弄清楚argument应该是什么.我认为它应该是解析器对象的一部分,但我找不到任何文档.
pok*_*oke 62
从源文档:
ArgumentError:当解析器的操作出错时,ArgumentParser对象引发的异常.解析命令行时引发的错误由ArgumentParser捕获并作为命令行消息发出.
argument构造函数的参数Action是引发异常的对象.通常不需要在Action子类之外引出它,并且在子类化它时,不需要显式地引出它; 你通常会提高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()
Run Code Online (Sandbox Code Playgroud)
请注意,这对非浮动也是安全的,因为非浮点数float(string)会引发ValueError非浮动,这也会触发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.')
Run Code Online (Sandbox Code Playgroud)
您可以使用它ArgumentParser.error来引发自定义错误消息,该消息将中断程序并打印到控制台.
但是,当然在这种基本情况下,-p如果可能的话,只是暗示猜测会更有意义.
ukr*_*utt 15
虽然parser.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'")
Run Code Online (Sandbox Code Playgroud)
这将产生如下输出:
$ 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'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31962 次 |
| 最近记录: |