ArgumentError: The exception raised by ArgumentParser objects when there are errors with the parser's actions. Errors raised while parsing the command-line are caught by ArgumentParser and emitted as command-line messages.
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()
虽然
parser.error()
是大多数人可能想要的,但是也可以使用argparse.ArgumentError()(正如问题所问的那样)这将产生如下输出:
来自the source documentation:
构造函数的
argument
参数是引发异常的Action
对象。通常不需要在Action
子类之外提升它,并且在对其进行子类化时,不需要显式地提升它;您通常改为提升ValueError
(或任何适当的)。介于0和1之间的浮点值
关于您的注释,您只希望接受介于0和1之间的浮点值。为此,您应该使用定义自定义类型的能力。例如,您可以这样做:
注意,这对于非浮点数也是安全的,因为} 只是一种指定自定义错误消息的方法。
float(string)
将为非浮点数引发ValueError
,这也会触发argparse
模块的无效类型错误。^{互斥参数
对于互斥参数,应该使用^{} 。
参数依赖性
参数依赖性并不是真正应该由参数解析器来完成的。对于语义细节,您应该自己做:
您可以使用^{} 发出自定义错误消息,该消息将中断程序并打印到控制台。
当然,在这种基本情况下,如果可能的话,隐式猜测
-p
会更有意义。相关问题 更多 >
编程相关推荐