为何Pylance报错:Float|ndarray无法匹配float|ndarray返回类型?
问题解析与修复
关于Float类型的疑问
Pylance提示的Float不是numpy对外公开的明确定义类型,它是类型检查器对numpy各类浮点标量(比如np.float64、np.float32)的抽象指代。scikit-learn的median_absolute_error返回单一值时,给出的是numpy浮点标量而非Python原生float,这就和你声明的float | np.ndarray返回类型不匹配,所以触发了错误提示。
修复方式
方式一:匹配numpy浮点类型
把返回类型改成np.floating | np.ndarray,直接对应函数实际返回的类型:
from sklearn.metrics import median_absolute_error import numpy as np class MedAbsError: name: str = "MAE" def compute(self, predictions: np.ndarray, observations: np.ndarray) -> np.floating | np.ndarray: return median_absolute_error(y_pred=predictions, y_true=observations)
方式二:转换为Python原生类型
如果需要返回Python原生float或numpy数组,可以在返回时做类型转换:
from sklearn.metrics import median_absolute_error import numpy as np class MedAbsError: name: str = "MAE" def compute(self, predictions: np.ndarray, observations: np.ndarray) -> float | np.ndarray: result = median_absolute_error(y_pred=predictions, y_true=observations) return float(result) if isinstance(result, np.floating) else result
内容的提问来源于stack exchange,提问作者An old man in the sea.
相关产品推荐
相关产品推荐

