在組合標誌時給我不同的結果(-x -y
>-xy
)。這是很難用言語來解釋,所以我已經減少了問題以下最低設置:python:argparse中的奇怪錯誤行爲
# test.py
def invalid_argument_type(x):
raise Exception("can't parse this") # in my code, it doesn't *always* fail
parser = argparse.ArgumentParser()
parser.add_argument('args', type = invalid_argument_type)
parser.add_argument('-x')
print parser.parse_args()
現在,錯誤地調用這個程序產量意外的結果。第一個命令是正確的,第二個有一個無效的標誌,第三個應該是一樣的第二:
$ python test.py -x foo
Namespace(args=[], x='foo')
$ python test.py -A -x foo
test.py: error: unrecognized arguments: -A
$ python test.py -Ax foo
Exception: can't parse this
看來,當標誌組合,「未知的標誌」的錯誤吞下-x
和foo
被視爲一個常規論證。請注意,如果-A
標誌存在,則-A
和-x
在任何情況下均可按預期工作。
這會導致高度混淆的錯誤消息。
我是否使用錯誤?有沒有辦法解決這個問題,還是應該將錯誤處理移到我自己手中?
但是當標誌有效時,組合標誌似乎工作正常:( – slezica
是的,你是對的,稍微更新我的答案。基本上,它不能開始與任何已知參數匹配'-Ax',所以它不會不知道在哪裏分開它,因此,它根本不會這樣做,並且將整個'-Ax'標記爲無效。 – poke
我將減少'argparse'的責任,並在 – slezica