<p>简单的方法是使用<code>sys</code>模块并使用以下命令:</p>
<pre><code>sys.tracebacklimit = 0
</code></pre>
<p>用你的旗子来决定你的行为。</p>
<p>示例:</p>
<pre><code>>>> import sys
>>> sys.tracebacklimit=0
>>> int('a')
ValueError: invalid literal for int() with base 10: 'a'
</code></pre>
<p>更好的方法是使用和<a href="https://docs.python.org/2/library/sys.html#sys.excepthook" rel="noreferrer">exception hook</a>:</p>
<pre><code>def exception_handler(exception_type, exception, traceback):
# All your trace are belong to us!
# your format
print "%s: %s" % (exception_type.__name__, exception)
sys.excepthook = exception_handler
</code></pre>
<h2>编辑:</h2>
<p>如果您仍然需要选择退回到原始挂钩:</p>
<pre><code>def exception_handler(exception_type, exception, traceback, debug_hook=sys.excepthook):
if _your_debug_flag_here:
debug_hook(exception_type, exception, traceback)
else:
print "%s: %s" % (exception_type.__name__, exception)
</code></pre>
<p>现在您可以将调试钩子传递给处理程序,但您很可能希望始终使用源于<code>sys.excepthook</code>的钩子(因此在<code>debug_hook</code>中不传递任何内容)。Python在定义时间(常见陷阱…)中绑定默认参数<strong>一次</strong>,这使得在替换之前,它始终与同一原始处理程序一起工作。</p>