之前的一些問題:
或許更多。
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一樣。