在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:
...
那么,我该如何专门捕捉第一个错误呢?
3 个回答
0
当你遇到一个只属于某个模块的异常时,你只需要使用引发这个异常时用的那个类。这样你就有了优势,因为你已经知道这个异常类在哪里,因为你是引发它的。
try:
raise socket.error, msg
except socket.error, (value, message):
# O no!
但是对于其他的异常,你要么得等到它被抛出时才能找到这个类在哪里,要么就得翻阅文档来查找它的来源。
3
第一个也是显而易见的,就像第二个一样,比如说。
>>> try:
... socket.socket().connect(("0.0.0.0", 0))
... except socket.error:
... print "socket error!!!"
...
socket error!!!
>>>
4
看看这个错误信息的堆栈跟踪。引发这个错误的代码是:raise socket.error, msg
。
所以你问题的答案是:你需要捕捉到socket.error
这个错误。
import socket
...
try:
...
except socket.error:
...