<p><code>warnings</code>是一个非常棒的标准库模块。你会喜欢了解它的:)</p>
<h2>有点背景</h2>
<p><code>warnings</code>的默认行为是只在第一次出现时显示来自特定行的特定警告。例如,以下代码将导致向用户显示两个警告:</p>
<pre class="lang-py prettyprint-override"><code>import numpy as np
# 10 warnings, but only the first copy will be shown
for i in range(10):
np.true_divide(1, 0)
# This is on a separate line from the other "copies", so its warning will show
np.true_divide(1, 0)
</code></pre>
<p>你有几个选择来改变这种行为。在</p>
<h2>选项1:重置警告注册表</h2>
<p>当您希望python“忘记”以前看到的警告时,可以使用<a href="https://docs.python.org/3/library/warnings.html#warnings.resetwarnings" rel="nofollow noreferrer">^{<cd3>}</a>:</p>
^{pr2}$
<p>请注意,这也会重置您所做的任何警告配置更改。这让我想到。。。在</p>
<h2>选项2:更改警告配置</h2>
<p><a href="https://docs.python.org/3/library/warnings.html" rel="nofollow noreferrer">warnings module documentation</a>更详细地介绍了这一点,但是有一个简单的选择就是使用<code>simplefilter</code>来更改默认行为。在</p>
<pre class="lang-py prettyprint-override"><code>import warnings
import numpy as np
# Show all warnings
warnings.simplefilter('always')
for i in range(10):
# Now this will warn every loop
np.true_divide(1, 0)
</code></pre>
<p>由于这是一个全局配置更改,它具有全局影响,您可能希望避免这些影响(应用程序中任何位置的所有警告都将每次显示)。一个不那么激烈的选择是使用上下文管理器:</p>
<pre class="lang-py prettyprint-override"><code>with warnings.catch_warnings():
warnings.simplefilter('always')
for i in range(10):
# This will warn every loop
np.true_divide(1, 0)
# Back to normal behavior: only warn once
for i in range(10):
np.true_divide(1, 0)
</code></pre>
<p>对于特定类型的警告,还可以使用更精细的选项来更改配置。为此,请查看<a href="https://docs.python.org/3/library/warnings.html#overriding-the-default-filter" rel="nofollow noreferrer">docs</a>。在</p>