<p>更新:<strong>对于Python 3,请选中<a href="https://stackoverflow.com/a/29442282/42223">Ben's answer</a></strong></p>
<hr/>
<p>要将消息附加到当前异常并重新引发它,请执行以下操作:
(外部尝试/例外只是为了显示效果)</p>
<p>对于python 2.x,其中x>;=6:</p>
<pre><code>try:
try:
raise ValueError # something bad...
except ValueError as err:
err.message=err.message+" hello"
raise # re-raise current exception
except ValueError as e:
print(" got error of type "+ str(type(e))+" with message " +e.message)
</code></pre>
<p>如果<code>err</code>是从<code>ValueError</code>派生的</em></strong>,这也将做正确的事情。例如<code>UnicodeDecodeError</code>。</p>
<p>注意,您可以添加任何您喜欢的内容到<code>err</code>。例如<code>err.problematic_array=[1,2,3]</code>。</p>
<hr/>
<p><strong>编辑:</strong>@Ducan points在注释中,由于<code>.message</code>不是<code>ValueError</code>的成员,以上内容不适用于python 3。相反,您可以使用它(有效的Python2.6或更高版本或3.x):</p>
<pre><code>try:
try:
raise ValueError
except ValueError as err:
if not err.args:
err.args=('',)
err.args = err.args + ("hello",)
raise
except ValueError as e:
print(" error was "+ str(type(e))+str(e.args))
</code></pre>
<p><strong>编辑2:</strong></p>
<p>根据用途,您还可以选择在自己的变量名下添加额外信息。对于python2和python3:</p>
<pre><code>try:
try:
raise ValueError
except ValueError as err:
err.extra_info = "hello"
raise
except ValueError as e:
print(" error was "+ str(type(e))+str(e))
if 'extra_info' in dir(e):
print e.extra_info
</code></pre>