将 OptimizeWarning 作为异常捕获
Catch OptimizeWarning as an exception
我只是想捕捉 scipy.optimize.curve_fit
函数抛出的 OptimizeWarning
,但我意识到它没有被识别为有效的异常。
这是我正在做的一个不可行的简单想法:
from scipy.optimize import curve_fit
try:
popt, pcov = curve_fit(some parameters)
except OptimizeWarning:
print 'Maxed out calls.'
# do something
我环顾四周 the docs 但什么也没有。
我是否遗漏了一些明显的东西,或者它只是由于某种原因没有定义?
顺便说一句,这是我收到的完整警告,我想抓住:
/usr/local/lib/python2.7/dist-packages/scipy/optimize/minpack.py:604: OptimizeWarning: Covariance of the parameters could not be estimated
category=OptimizeWarning)
您可以要求 Python 使用以下代码将此警告作为异常发出:
import warnings
from scipy.optimize import OptimizeWarning
warnings.simplefilter("error", OptimizeWarning)
# Your code here
有警告的问题
不幸的是,Python 中的 warnings
有一些问题需要您注意。
多个过滤器
首先,可以有多个过滤器,所以你的警告过滤器可以被其他东西覆盖。这还算不错,可以使用 catch_warnings
上下文管理器来解决:
import warnings
from scipy.optimize import OptimizeWarning
with warnings.catch_warnings():
warnings.simplefilter("error", OptimizeWarning)
try:
# Do your thing
except OptimizeWarning:
# Do your other thing
提出一次
其次,默认情况下只发出一次警告。如果您的警告在您设置过滤器之前已经发出,您可以更改过滤器,它不会再次发出警告。
据我所知,很遗憾,对此您无能为力。您需要确保 运行 尽早 warnings.simplefilter("error", OptimizeWarning)
。
我只是想捕捉 scipy.optimize.curve_fit
函数抛出的 OptimizeWarning
,但我意识到它没有被识别为有效的异常。
这是我正在做的一个不可行的简单想法:
from scipy.optimize import curve_fit
try:
popt, pcov = curve_fit(some parameters)
except OptimizeWarning:
print 'Maxed out calls.'
# do something
我环顾四周 the docs 但什么也没有。
我是否遗漏了一些明显的东西,或者它只是由于某种原因没有定义?
顺便说一句,这是我收到的完整警告,我想抓住:
/usr/local/lib/python2.7/dist-packages/scipy/optimize/minpack.py:604: OptimizeWarning: Covariance of the parameters could not be estimated
category=OptimizeWarning)
您可以要求 Python 使用以下代码将此警告作为异常发出:
import warnings
from scipy.optimize import OptimizeWarning
warnings.simplefilter("error", OptimizeWarning)
# Your code here
有警告的问题
不幸的是,Python 中的 warnings
有一些问题需要您注意。
多个过滤器
首先,可以有多个过滤器,所以你的警告过滤器可以被其他东西覆盖。这还算不错,可以使用 catch_warnings
上下文管理器来解决:
import warnings
from scipy.optimize import OptimizeWarning
with warnings.catch_warnings():
warnings.simplefilter("error", OptimizeWarning)
try:
# Do your thing
except OptimizeWarning:
# Do your other thing
提出一次
其次,默认情况下只发出一次警告。如果您的警告在您设置过滤器之前已经发出,您可以更改过滤器,它不会再次发出警告。
据我所知,很遗憾,对此您无能为力。您需要确保 运行 尽早 warnings.simplefilter("error", OptimizeWarning)
。