如何在Python中通过try/except获取更好的错误信息
考虑一下我用来检查存储在 e
中的错误信息的 try
/except
代码块。
使用 Try/Catch 获取 e
queryString = "SELECT * FROM benchmark WHERE NOC = 2"
try:
res = db.query(queryString)
except SQLiteError, e:
# `e` has the error info
print `e`
这里的 e
对象只包含上面提到的字符串而已。不过,当 Python 报告一个未处理的错误时,它会显示非常详细的信息,如下所示:
Traceback (most recent call last): File "fool.py", line 1, in open("abc.zyz", "r") IOError: [Errno 2] No such file or directory: 'abc.zyz'
我的问题是,我怎么才能获取像上面那样的信息(比如文件名和行号等)?或者,如果 e
包含这些信息,它是如何存储在里面的?
3 个回答
2
- 可以看看
traceback
这个库。 - 如果你想把错误直接往上抛,而不是去修改它们,可以在
except
块里使用raise
。这样做就像是except
块根本不存在一样(当然,前面如果有条件判断或者其他操作,还是会有影响)。
3
和前面两个回答一样,使用 traceback
。这里有一个更完整的例子。
import traceback
def foo():
raise RuntimeError('we have a problem')
try:
foo()
except:
traceback.print_exc()
当你运行这个代码时,你会看到
Traceback (most recent call last):
File "C:\0\tmp\x.py", line 6, in <module>
foo()
File "C:\0\tmp\x.py", line 3, in foo
raise RuntimeError('we have a problem')
RuntimeError: we have a problem
10
这段代码会显示出错误的追踪信息。
import traceback
try:
res = db.query(queryString)
except SQLiteError, e:
# `e` has the error info
print `e`
for tb in traceback.format_tb(sys.exc_info()[2]):
print tb