擅长:python、mysql、java
<p>你不能篡改回溯对象(这是件好事)。你只能控制如何处理你已经拥有的。在</p>
<p>唯一的例外是:你可以</p>
<ul>
<li>用另一个异常替换一个异常,或者用<code>raise e</code>重新引发它(即使回溯指向re-raise语句的位置)</li>
<li><a href="https://docs.python.org/2/reference/simple_stmts.html#the-raise-statement" rel="nofollow">raise an exception with an explicit traceback object</a></li>
<li><a href="https://docs.python.org/2/reference/datamodel.html#index-67" rel="nofollow">remove <em>outer</em> frame(s) from a traceback object by accessing its ^{<cd2>} property</a>(这反映了回溯对象的洋葱状结构)</li>
</ul>
<p>对于您的目的,方法似乎是第一个选项:从高于函数一个级别的处理程序重新引发异常。在</p>
<p>我再说一遍,<strong>这对您自己或任何使用您的模块的人都是有害的,因为它会删除有价值的诊断信息。如果无论出于什么理由,您都坚持要使您的模块成为专有的,那么让它成为一个C扩展会更有效率。在</p>