try:
f(*args, **kwargs)
except TypeError:
print "doh!"
在這種情況下,這樣做的原因可能TypeError
函數參數中,如出現問題f() got an unexpected keyword argument 'b'
。然而,TypeError
也可能由於功能體本身內的問題而產生,例如, list indices must be integers, not str
。
我不知道在Python 2中是否有一個可靠的方法來區分兩種情況(參數問題,身體問題)。也許一些基於裝飾者的方法?
推理:我正在實施另一種工作制度。工作基本上是一個功能。這個函數的參數可以從用戶輸入中派生出來,並通過JSON序列化/反序列化過程。我希望系統爲系統的用戶提供儘可能準確的錯誤信息。因此,我希望控制作業執行的實體能夠區分TypeError
的兩個來源。此外,我認爲這本身就是一個非常有趣的問題。
我意識到https://stackoverflow.com/questions/12712475/how-to-check-if-a-typeerror-raised-from-mismatched-function-arguments基本上是這個問題的重複。然而,那裏的評論討論停止了,沒有任何答案。我希望在這種情況下可以打開我自己的問題並重新解決問題。
我認爲唯一的解決方案是解析錯誤信息或檢查'sys'模塊中的異常信息。 無論如何,我認爲你應該能夠避免這種情況。如果使用正確的參數調用該函數,則不應引發「TypeError」。在大多數邊角情況下,可能會使用「ValueError」。 – Bakuriu