<p>我相信这里建议您更紧密地管理<code>try/except</code>块的几个答案是您正在寻找的答案。这是一个风格的东西,不是图书馆的东西。</p>
<p>然而,有时我们发现自己处于这样一种情况:它不是一种风格的东西,而您确实需要行号来执行其他的程序操作。如果这就是您的要求,那么您应该考虑<a href="http://docs.python.org/library/traceback.html" rel="noreferrer">^{<cd2>}</a>模块。您可以提取有关最近异常的所有所需信息。<code>tb_lineno</code>函数将返回导致异常的行号。</p>
<pre><code>>>> 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
</code></pre>
<p>回溯管道的较新版本修复了2.3之前的问题,允许下面的代码按预期工作:(这是“正确的方法”)</p>
<pre><code>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)
</code></pre>