擅长:python、mysql、java
<p>回溯帧也有行号:</p>
<pre><code>lineno = traceback.tb_lineno
</code></pre>
<p>您还可以访问code对象,该对象将具有名称和文件名:</p>
^{pr2}$
<p>您可以使用文件名和行号,加上帧全局参数和<a href="http://docs.python.org/2/library/linecache.html" rel="noreferrer">^{<cd1>} module</a>将其有效地转换为正确的源代码行:</p>
<pre><code>linecache.checkcache(filename)
line = linecache.getline(filename, lineno, traceback.tb_frame.f_globals)
</code></pre>
<p>这就是<a href="http://docs.python.org/2/library/traceback.html" rel="noreferrer">^{<cd2>} module</a>在任何情况下用于将回溯转换为有用信息的方法。在</p>
<p>由于字节码只有一个行号与之关联,所以不能直接将字节码引回到源代码行的精确<em>部分</em>;您必须自己解析该行,以确定每个部分将发出的字节码,然后将其与代码对象的字节码相匹配。在</p>
<p>您可以使用<a href="http://docs.python.org/2/library/ast.html#ast.parse" rel="noreferrer">^{<cd3>} module</a>来实现这一点,但不能逐行执行,因为您需要范围上下文来为本地、单元格和全局名称查找生成正确的字节码。在</p>