天天看點

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一樣。