考虑我用于检查e
中存储的错误消息的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
包含此信息,它是如何存储在其中的?
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分:2)
traceback
库。raise
块中使用except
,然后其行为就像except
块isn'那里(除了raise
之前你可能做过的任何条件逻辑/副作用)。