2009-07-15 16 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: 
    ... 

私は具体的には、第1のエラーをキャッチしますか?

答えて

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:トレースバックを注意深く読んでください。 –

3

第1のものも第2のものとして明白である。

>>> try: 
...  socket.socket().connect(("0.0.0.0", 0)) 
... except socket.error: 
...  print "socket error!!!" 
... 
socket error!!! 
>>> 
関連する問題