>>> import traceback
>>> dir(traceback)
['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_format_final_exc_line', '_print', '_some_str', 'extract_stack', 'extract_tb', 'format_exc', 'format_exception', 'format_exception_only', 'format_list', 'format_stack', 'format_tb', 'linecache', 'print_exc', 'print_exception', 'print_last', 'print_list', 'print_stack', 'print_tb', 'sys', 'tb_lineno', 'types']
>>> help(traceback.tb_lineno)
Help on function tb_lineno in module traceback:
tb_lineno(tb)
Calculate correct line number of traceback given in tb.
Obsolete in 2.3
回溯管道的较新版本修复了2.3之前的问题,允许下面的代码按预期工作:(这是“正确的方法”)
import traceback
import sys
try:
raise Exception("foo")
except:
for frame in traceback.extract_tb(sys.exc_info()[2]):
fname,lineno,fn,text = frame
print "Error in %s on line %d" % (fname, lineno)
try:
if x:
print 'before statement 1'
statement1
print 'before statement 2' #ecc. ecc.
statement2
statement3
elif y:
statement4
statement5
statement6
else:
raise
except:
print sys.exc_traceback.tb_lineno
#this is the line number, but there are also other infos
您应该在调试器中运行程序,例如^{} 。这将允许您正常运行代码,然后在发生类似意外情况时检查环境。
给定一个名为“main.py”的脚本,运行如下:
然后,当程序启动时,它将在调试器中启动。键入
c
继续,直到下一个断点(或崩溃)。然后,您可以通过执行诸如print spam.eggs
之类的操作来检查环境。您还可以通过执行pdb.set_trace()
(我通常执行import pdb; pdb.set_trace()
)来设置断点。另外,什么意思是“语句3”可以引发异常?你在期待例外吗?如果是这样,最好在这个语句周围写一个try/except块,这样程序就可以继续运行了。
我相信这里建议您更紧密地管理
try/except
块的几个答案是您正在寻找的答案。这是一个风格的东西,不是图书馆的东西。然而,有时我们发现自己处于这样一种情况:它不是一种风格的东西,而您确实需要行号来执行其他的程序操作。如果这就是您的要求,那么您应该考虑^{} 模块。您可以提取有关最近异常的所有所需信息。
tb_lineno
函数将返回导致异常的行号。回溯管道的较新版本修复了2.3之前的问题,允许下面的代码按预期工作:(这是“正确的方法”)
这个呢:
这是简单的解决方法,但我建议使用调试器
或者更好,使用sys模块:D
相关问题 更多 >
编程相关推荐