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

scipy.signal的butterworth滤波器函数返回值解包异常问题咨询

问题成因

scipy.signal.butter的返回值数量由入参output决定:

  • 默认output='ba'时,返回滤波器的分子系数b、分母系数a两个值,所以第一种写法运行时完全正常。
  • 只有当显式指定output='zpk'时,才会返回零点、极点、增益3个值。

编辑器的高亮报错是静态类型检查工具的误报,导致问题的常见原因有两个:

  • 你使用的scipy版本内置的类型注解不完整,没有正确关联output参数和返回值数量的对应关系,静态检查时默认按3个返回值的规则做校验。
  • 你的编辑器对应的Python静态检查插件(比如Pylance、Pyright)版本过低,无法正确识别多返回值分支的类型注解。
解决方法

优先方案:显式指定output参数

在调用函数时主动声明output='ba',既消除静态检查误报,也让代码逻辑更明确,不会出现歧义:

b, a = butter(order, normal_cutoff, btype='low', analog=False, output='ba')

其他可选方案

  • 升级scipy到1.8.0及以上版本,同时升级编辑器的Python静态检查插件,新版本已经修复了该函数的类型注解错误,不会再出现误报。
  • 如临时不想修改代码,可在对应代码行添加静态检查忽略标记(不推荐,会覆盖其他真实的类型错误提示):
b, a = butter(order, normal_cutoff, btype='low', analog=False) # type: ignore
补充说明

第二种写法运行报错的原因是,仅修改了接收返回值的变量数量,没有同步修改output参数,函数仍然按默认规则返回2个值,自然会出现返回值数量不匹配的运行时错误。如果需要接收3个返回值,需要同步指定output='zpk':

z, p, k = butter(order, normal_cutoff, btype='low', analog=False, output='zpk')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:39:00