2017-04-26 28 views
2

有沒有辦法找出哪些Python的方法可以提高其意外事件或錯誤?我在官方的Python文檔中沒有發現太多內容。有沒有辦法找出哪些Python的方法可以提高其異常或錯誤

+0

事實上,任何事情都會引發異常,特別是在您傳遞它無法處理的參數時。 –

+0

通過「哪個Python方法可以引發哪個異常或錯誤」,你是指哪種方法_will_提高它,或者只是有能力提高它? –

+1

我指的是Excpetions /錯誤其可能可以通過特定的方法升高。 – no0by5

回答

6

一般來說,答案是否定的。有些例外情況是有記錄的,但大多數只是遵循可以學習的一般模式。 的SyntaxError首先檢查並提出了語法上是無效的代碼。當一個變量是未定義的(未分配尚未或拼寫錯誤)NameError出現。 類型錯誤提高了錯誤的參數數目或不匹配的數據類型。 ValueError異常裝置的類型是正確的,但該值不爲功能意義(即,負向輸入math.sqrt()。如果該值是在一個序列中查找索引,IndexError上升。如果值是一個映射查找的關鍵,KeyError異常提高。另一種常見的例外是AttributeError的爲缺少的屬性。的IOError是失敗的I/O,而且OSERROR的操作系統錯誤。

除了學習常見模式,通常只需運行一個函數並查看它在給定的cir中引發的異常就很容易cumstance。

通常,函數無法知道或記錄所有可能的錯誤,因爲輸入可能會引發它們自己的異常。考慮一下這個功能:

def f(a, b): 
    return a + b 

它可以提高類型錯誤如果參數的數目是錯誤的,或者如果一個不支持__add__方法。但是,基礎數據可能會引發不同的例外情況:

>>> f(10) 

Traceback (most recent call last): 
    File "<pyshell#3>", line 1, in <module> 
    f(10) 
TypeError: f() takes exactly 2 arguments (1 given) 
>>> f(10, 20) 
30 
>>> f('hello', 'world') 
'helloworld' 
>>> f(10, 'world') 

Traceback (most recent call last): 
    File "<pyshell#6>", line 1, in <module> 
    f(10, 'world') 
    File "<pyshell#2>", line 2, in f 
    return a + b 
TypeError: unsupported operand type(s) for +: 'int' and 'str' 
>>> class A: 
    def __init__(self, x): 
     self.x = x 
    def __add__(self, other): 
     raise RuntimeError(other) 

>>> f(A(5), A(7)) 

Traceback (most recent call last): 
    File "<pyshell#13>", line 1, in <module> 
    f(A(5), A(7)) 
    File "<pyshell#2>", line 2, in f 
    return a + b 
    File "<pyshell#12>", line 5, in __add__ 
    raise RuntimeError(other) 
RuntimeError: <__main__.A instance at 0x103ce2ab8> 
1

您可以__name__發現異常的名稱,例如:

try : 
    some_function() 
except Exception as ex : 
    print('function: {0}, exception: {1}'.format(some_function.__name__, type(ex).__name__)) 
相關問題