给定回溯错误日志,我并不总是知道如何捕获特定异常。
我的问题一般是,如何确定要编写哪个“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:
...
我如何具体捕捉第一个错误?
答案 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!
但对于其他此类异常,您必须等到它被抛出才能找到该类的位置,或者您必须阅读文档以找出它的来源。