<blockquote>
<p>How can I see the warning again without restarting python?</p>
</blockquote>
<p>只要在脚本开始时执行以下操作,就不需要重新启动。在</p>
<pre><code>import pandas as pd
import numpy as np
import warnings
np.seterr(all='warn')
warnings.simplefilter("always")
</code></pre>
<p>在这一点上,每次你试图除以零,它将显示</p>
^{pr2}$
<hr/>
<p>说明:</p>
<p>我们正在设置一些警告过滤器。第一个(<a href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.seterr.html" rel="nofollow">^{<cd1>}</a>)告诉NumPy它应该如何处理警告。我已经将其设置为在<em>all</em>上显示警告,但是如果您只想看到被零除的警告,请将参数从<code>all</code>更改为<code>divide</code>。在</p>
<p>接下来,我们更改希望<code>warnings</code>模块始终显示警告的方式。我们通过设置<a href="https://docs.python.org/2/library/warnings.html#the-warnings-filter" rel="nofollow">warning filter</a>来实现这一点。在</p>
<blockquote>
<p>What is the difference between first and second warning? Why only the second one is stored in this __warningregistry__? Where is the first one stored? </p>
</blockquote>
<p>报告此问题的<a href="https://bugs.python.org/msg75117" rel="nofollow">bug report</a>中对此进行了描述:</p>
<blockquote>
<p>If you didn't raise the warning before using the simple filter, this
would have worked. The undesired behavior is because of
__warningsregistry__. It is set the first time the warning is emitted.
When the second warning comes through, the filter isn't even looked at.
I think the best way to fix this is to invalidate __warningsregistry__
when a filter is used. It would probably be best to store warnings data
in a global then instead of on the module, so it is easy to invalidate.</p>
</blockquote>
<p>顺便说一句,<a href="https://bugs.python.org/issue4180" rel="nofollow">bug</a>在3.4和3.5版本中已经被关闭。在</p>