捕获OptimizeWarning作为例外

Gab*_*iel 4 python warnings exception scipy

我只是想抓住函数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
Run Code Online (Sandbox Code Playgroud)

我环顾了文档,但那里什么都没有.

我错过了一些明显的东西,还是因为某些原因而没有明确定义?

顺便说一下,这是我得到的完整警告,我想抓住:

/usr/local/lib/python2.7/dist-packages/scipy/optimize/minpack.py:604: OptimizeWarning: Covariance of the parameters could not be estimated
  category=OptimizeWarning)
Run Code Online (Sandbox Code Playgroud)

Tho*_*zco 6

您可以要求Python使用以下代码将此警告作为异常引发:

import warnings
from scipy.optimize import OptimizeWarning

warnings.simplefilter("error", OptimizeWarning)
# Your code here
Run Code Online (Sandbox Code Playgroud)

警告问题

不幸的是,warnings在Python中你需要注意一些问题.

多个过滤器

首先,可以有多个过滤器,因此您的警告过滤器可以被其他内容覆盖.这不是太糟糕,可以与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 
Run Code Online (Sandbox Code Playgroud)

举起一次

其次,警告仅在默认情况下提出一次.如果在设置过滤器之前已经提出警告,则可以更改过滤器,它不会再次发出警告.

据我所知,遗憾的是你无能为力.你需要确保warnings.simplefilter("error", OptimizeWarning)尽早运行.