python - 将 OptimizeWarning 作为异常捕获

标签 python exception scipy warnings

我只是想捕捉 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 中的警告 有一些您需要注意的问题。

多个过滤器

首先,可以有多个过滤器,所以你的警告过滤器可以被其他东西覆盖。这还算不错,可以使用 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)

关于python - 将 OptimizeWarning 作为异常捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31301017/

相关文章:

c++ - 库使用者是否可以覆盖 C++ 异常处理?

python - 无法在 Windows 7 上的 Enthought Canopy 中可视化 python (vpython)

python - 从 C++ 调用 scikit-learn 函数

python - Python 中的参数依赖性 - 无法使其工作

c# - catch block 和方法中的 throw new Exception 之间的区别

java - 如何让程序在异常后继续运行?

python - 在 python 中为大型 scipy.sparse 矩阵运算分配内存

python - 如何用Python求解非线性三角方程组(MATLAB可以轻松求解)

python - 为什么 stats.sem() 不能识别 nan_policy 关键字?

python - 错误: nothing to repeat mean in this traceback from a compiled Python regex是什么意思