2017-02-20 159 views
0

異常類型錯誤寫代碼我有一個功能,它看起來像這樣:在蟒蛇

def fun(a,b,c=None): pass

當我把這個功能在Python 3 fun(1),它給了我錯誤的TypeError: fun() missing 1 required positional argument: 'b'這是可以理解的,但是當我在Python 2中調用這個函數,它給我錯誤爲TypeError: fun() takes at least 2 arguments (1 given)

所以我想在python 2中捕獲這個錯誤,因爲它在python 3中被捕獲而沒有切換到python 3.我如何實現這一目標?另外,如果我正在爲此編寫一個裝飾器,我需要保留裝飾器之外的函數簽名。

+0

類型的錯誤沒有什麼不同,這是不同的信息。默認消息在'C'中定義,不能直接通過Python進行修改。您可以在Python 2中捕獲異常,並在Python 3中用類似的異常消息重新引發異常(但需要大量內省調用堆棧和函數對象以查找調用中缺少的參數)。 –

+0

我是python的新手。你能建議我做點什麼嗎? @ JimFasarakis-Hilliard –

+0

老實說?只是不要使用Python 2是最好的建議。因爲這個決定可能不是你自己決定的,不過,你總是可以看看stdlib中的'inspect'模塊,它提供了內省功能,可以幫助你解決你的問題。 –

回答

1

你想達到什麼目的? python2和python3都拋 '類型錯誤',這意味着調用者濫用功能 '樂趣'

def foo(a, b, c = None): 
    pass 

try: 
    foo(1) 
except TypeError: 
    print("TypeError") 

調用它python2:

python2 code_for_exception_type_error.py 
TypeError 

而且python3:

python3 code_for_exception_type_error.py 
TypeError 
+0

我正在使用python2。在我的模塊中,我有一個像上面這樣的函數。現在,當其他人將使用我的模塊的這個函數(有趣的寫在上面的問題)與不正確的參數,我想抓住這個事情,並寫一條消息,顯示哪些位置參數丟失。 Python3在內部處理這個事情,但不是Python 2.所以我怎麼能在python2中做這件事情,並用消息拋出我的自定義錯誤。我希望我現在清楚。 –