从 scipy.interpolate.InterpolatedUnivariateSpline 中捕获 dfitpack.error

Catch dfitpack.error from scipy.interpolate.InterpolatedUnivariateSpline

我正在对一个数组进行插值,但有可能我没有足够的节点来进行插值。在这种情况下,我需要调整平滑样条的程度。在下面给出的最小工作示例中,如果 N = 3.

就是这种情况
from scipy.interpolate import InterpolatedUnivariateSpline
import numpy as np

N = 10       # is working fine
# N = 3      # produces error
x = np.linspace(-3, 3, N)
y = np.exp(-x**2) + 0.1 * np.random.randn(N)
spline = InterpolatedUnivariateSpline(x, y, bbox=[x[0],x[-1]], k=3, ext=0)

x_full = np.linspace(-3,3,10*N)
yspline = spline(x_full)

错误,如果N=3 error: (m>k) failed for hidden m: fpcurf0:m=3。 与 and here 描述的错误相同。我知道这个错误是什么意思,也知道为什么会出现,这不是问题所在。

我想写一篇try/except来捕捉这个案例并妥善处理。 这是什么<ErrorType>

try:
    spline = InterpolatedUnivariateSpline(x, y, bbox=[x[0],x[-1]], k=3, ext=0)
    yspline = spline(x_full)
except <ErrorType>:
    print('something')

(我知道我可以改为编写一个 if/else 语句来检查 xy 的长度。我会记住这一点作为替代方案。但要知道,它最好使用 try/except 语句。)

干杯, 安吉拉

except Exception。虽然通常被认为是不好的形式(出于某种原因!),但它会在这里工作。