我有一个类似于这样的代码:
try:
if x:
statement1
statement2
statement3
elif y:
statement4
statement5
statement6
else:
raise
except:
statement7
Run Code Online (Sandbox Code Playgroud)
在这里,我确信异常发生在If x:块中,但我想知道在If x:异常发生的块的哪个语句中.有没有办法获得发生异常的行号?
问候,
Ant*_*Ant 21
那这个呢:
try:
if x:
print 'before statement 1'
statement1
print 'before statement 2' #ecc. ecc.
statement2
statement3
elif y:
statement4
statement5
statement6
else:
raise
except:
statement7
Run Code Online (Sandbox Code Playgroud)
这是一个简单的解决方法,但我建议使用调试器
甚至更好,使用sys模块:D
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
Run Code Online (Sandbox Code Playgroud)
J.J*_*.J. 13
我相信这里的几个答案建议你try/except更紧密地管理你的积木是你正在寻找的答案.这是一种风格的东西,而不是图书馆的东西.
然而,有时我们发现自己在一个情况下它不是一种风格的东西,你真的做需要的行号做一些其他programattic行动.如果这就是您所要求的,您应该考虑该traceback模块.您可以提取有关最新异常的所有信息.该tb_lineno函数将返回导致异常的行号.
>>> 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
Run Code Online (Sandbox Code Playgroud)
较新版本的回溯管道修复了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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21710 次 |
| 最近记录: |