我只是试图捕获OptimizeWarning函数抛出的scipy.optimize.curve_fit,但我意识到它没有被识别为有效的异常。
这是一个不起作用的简单想法:

from scipy.optimize import curve_fit
try:
    popt, pcov = curve_fit(some parameters)
except OptimizeWarning:
    print 'Maxed out calls.'
    # do something

我环顾四周,但什么也没有。
是我遗漏了一些显而易见的东西,还是只是因为某种原因没有定义?
顺便说一下,这是我得到的全部警告,我想抓住:
/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)

10-04 18:56