哪个异常捕获python中的xxxx错误

时间:2009-07-15 11:04:54

标签: python exception

给定回溯错误日志,我并不总是知道如何捕获特定异常。

我的问题一般是,如何确定要编写哪个“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 :(得分:4)

查看堆栈跟踪。引发异常的代码是:raise socket.error, msg

所以问题的答案是:你必须抓住socket.error

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

答案 1 :(得分:3)

第一个也是显而易见的,例如第二个。

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

答案 2 :(得分:0)

当你有一个模块特有的异常时,你只需要使用相同的类来引发它。在这里你有优势,因为你已经知道了异常类的位置,因为你正在提高它。

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

但对于其他此类异常,您必须等到它被抛出才能找到该类的位置,或者您必须阅读文档以找出它的来源。