天天看点

python中invalid argument_在Python中使用argparse处理无效参数

之前的一些问题:

或许更多。

argparse文档讨论如何使用parse_known_args。这将返回一个它无法识别的参数列表。这是处理一种错误的简便方法。

它还讨论了如何编写自己的error和exit方法。你不喜欢的错误会通过这两种方法。更改它们的正确方法是子类ArgumentParser,尽管您可以对现有的解析器进行monkey补丁。默认版本位于argparse.py文件的末尾,因此您可以研究它们的作用。

第三个选项是尝试/排除Systemexit。try:

parser=argparse.ArgumentParser()

args=parser.parse_args()

except SystemExit:

exc = sys.exc_info()[1]

print(exc)

这样,error/exit仍然会产生错误消息(到sys.stderr),但是您可以阻止exit并继续执行其他操作。1649:~/mypy$ python stack38340252.py -x

usage: stack38340252.py [-h]

stack38340252.py: error: unrecognized arguments: -x

2

前面的一个问题抱怨说,parser.error没有得到关于错误的太多信息;它只得到一个格式化的消息:def myerror(message):

print('error message')

print(message)

parser=argparse.ArgumentParser()

parser.error = myerror

args=parser.parse_args()

显示器1705:~/mypy$ python stack38340252.py -x

error message

unrecognized arguments: -x

您可以分析该消息以找出-x是无法识别的字符串。在对早期版本的改进中,它可以列出多个参数1705:~/mypy$ python stack38340252.py foo -x abc -b

error message

unrecognized arguments: foo -x abc -b

查找self.error以查看所有可能触发错误消息的情况。如果你需要更多的想法,关注一种特殊类型的错误。

一、二、二、三

unrecognized arguments错误由调用parse_known_args的parse_args产生,如果extras不是空的,则引发此错误。所以它的特殊信息是parse_known_args无法处理的字符串列表。

如果它捕获了一个ArgumentError,则其部分的parse_known_args调用self.error。一般来说,当一个特定的论点(行动)有问题时,就会产生这些问题。但是_parse_known_args调用self.error如果缺少必需的操作,或者如果存在互斥组错误。choices可以产生不同的错误,就像type一样。