You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Numba nopython模式下@jit修饰函数触发exception_match类TypingError

报错触发原因

  • Numba的nopython模式对异常匹配的支持存在限制,官方明确说明该模式下仅支持捕获基类Exception,你代码中使用except ValueError捕获特定异常类的写法不被支持,是触发本次TypingError的直接原因。
  • 额外的兼容隐患:代码中使用的np.int已在NumPy 1.20及以上版本被废弃,np.mat也属于Numba支持度较低的接口,即使解决了异常问题后续也可能触发其他报错。

解决方法

按照以下步骤修改代码即可正常运行:

  1. 调整异常捕获逻辑:要么把except ValueError改成except Exception,要么直接去掉try-except块,让numba在参数类型不匹配时自动抛错即可,效果和自定义捕获一致。
  2. 替换废弃/低兼容接口:将np.int替换为Python内置的int(),将np.mat替换为np.array,同时将函数内抛出的TypeError改为基类Exception,适配nopython模式的异常规则。

修改后的可运行代码如下:

import numpy as np
from math import factorial
from numba import jit
import pandas as pd

@jit(nopython=True)
def savitzky_golay(y, window_size, order, deriv=0, rate=1):
    window_size = np.abs(int(window_size))
    order = np.abs(int(order))
    
    if window_size % 2 != 1 or window_size < 1:
        raise Exception("window_size size must be a positive odd number")
    
    if window_size < order + 2:
        raise Exception("window_size is too small for the polynomials order")
    
    order_range = range(order+1)
    half_window = (window_size -1) // 2

    b = np.array([[k**i for i in order_range] for k in range(-half_window, 
                                                           half_window+1)])
    m = np.linalg.pinv(b).A[deriv] * rate**deriv * factorial(deriv)
    firstvals = y[0] - np.abs( y[1:half_window+1][::-1] - y[0] )
    lastvals = y[-1] + np.abs(y[-half_window-1:-1][::-1] - y[-1])
    y = np.concatenate((firstvals, y, lastvals))
    return np.convolve( m[::-1], y, mode='valid')


yaw = np.array(pd.read_csv(r'D:\datasets\df.csv')['yaw'])
sg_yaw = savitzky_golay(yaw , window_size =3 , order = 1, deriv=0, rate=1)

内容的提问来源于stack exchange,提问作者Peacepieceonepiece

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:18:02