之前的一些问题:
或许更多。
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一样。