在Python中哪个异常捕获xxxx错误

5 投票
3 回答
2400 浏览
提问于 2025-04-15 12:55

给定一个错误追踪日志,我并不总是知道该如何捕捉特定的异常。

我的问题是,通常情况下,我该如何判断应该写哪个“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:
    ...

撰写回答