2009-07-15 21 views
5

給出了一個追溯錯誤日誌,我並不總是知道如何捕獲一個特定的異常。哪個異常捕獲python中的xxxx錯誤

我的問題是在一般情況下,我如何確定要編寫哪些「except」子句來處理某個異常。

例1:

File "c:\programs\python\lib\httplib.py", line 683, in connect 
    raise socket.error, msg 
error: (10065, 'No route to host') 

例2:

return codecs.charmap_encode(input,errors,encoding_table) 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position(...) 

捕捉第二示例是顯而易見的:

try: 
    ... 
except UnicodeDecodeError: 
    ... 

我如何專門捕獲第一誤差?

回答

4

看看堆棧跟蹤。引發異常的代碼是:raise socket.error, msg

所以你的問題的答案是:你必須趕上socket.error

import socket 
... 
try: 
    ... 
except socket.error: 
    ... 
0

當你有一個模塊特有的異常時,你只需使用相同的類來引發它。這裏你有優勢,因爲你已經知道異常類的位置,因爲你正在提升它。

try: 
    raise socket.error, msg 
except socket.error, (value, message): 
    # O no! 

但對於其他類似的例外您可能不得不等待,直到它被扔進去尋找到類,或者您有通過文檔閱讀,找出它的來源。

+0

-1他沒有提高它,`httplib`模塊正在提高它。調試101,第1課:仔細閱讀回溯。 – 2011-11-24 22:56:56

3

第一個也很明顯,作爲第二個例子,

>>> try: 
...  socket.socket().connect(("0.0.0.0", 0)) 
... except socket.error: 
...  print "socket error!!!" 
... 
socket error!!! 
>>>