2009-07-15 5 views
5

gegeben ein traceback Fehlerprotokoll, ich weiß nicht immer, wie man eine bestimmte Ausnahme zu fangen.welche Ausnahme fängt xxxx Fehler in Python

Meine Frage ist im Allgemeinen, wie bestimmt ich, welche "außer" -Klausel zu schreiben, um eine bestimmte Ausnahme zu behandeln.

Beispiel 1:

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

Beispiel 2:

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

das zweite Beispiel Fang ist offensichtlich:

try: 
    ... 
except UnicodeDecodeError: 
    ... 

wie fangen ich speziell den ersten Fehler?

Antwort

4

Schauen Sie sich den Stack-Trace an. Der Code, der die Ausnahme auslöst, lautet: raise socket.error, msg.

So ist die Antwort auf Ihre Frage: Sie müssen socket.error fangen.

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

Wenn Sie eine Ausnahme haben, die einzigartig für ein Modul ist, müssen Sie einfach die gleiche Klasse verwenden, die verwendet wird, um es zu erhöhen. Hier haben Sie den Vorteil, dass Sie bereits wissen, wo die Ausnahmeklasse liegt, weil Sie sie erhöhen.

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

Aber für andere solche Ausnahme entweder Sie müssen warten, bis es die Klasse zu finden geworfen wird, wo, oder Sie haben durch die Dokumentation zu lesen, um herauszufinden, wo es herkommt.

+0

-1 Er hebt es NICHT, das 'httplib' Modul erhöht es. Debugging 101, Lektion 1: Lesen Sie das Traceback sorgfältig durch. –

3

Die erste ist auch offensichtlich, als zweite z.

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