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

PyType无法识别int/float作为numbers.Number返回类型的解决方案

解决PyType对numbers.Number返回类型的检查错误

解决方案

方案1:明确返回类型为Union[int, float]

函数实际只会返回int或float类型,直接将返回类型标注为Union[int, float],PyType就能正确识别:

from numbers import Number
from typing import Union
import math

def to_number(value: Union[str, Number]) -> Union[int, float]:
    if isinstance(value, Number) and math.isnan(value):
        raise ValueError(f"No NaNsense")

    try:
        return int(value)
    except ValueError:
        try:
            return float(value)
        except ValueError as exc:
            raise ValueError(f"'{value}' is not a number") from exc

方案2:使用TypeVar绑定numbers.Number

通过typing.TypeVar创建一个绑定到numbers.Number的类型变量,让PyType认可int和float作为其合法子类:

from numbers import Number
from typing import Union, TypeVar
import math

Num = TypeVar('Num', bound=Number)

def to_number(value: Union[str, Number]) -> Num:
    if isinstance(value, Number) and math.isnan(value):
        raise ValueError(f"No NaNsense")

    try:
        return int(value)
    except ValueError:
        try:
            return float(value)
        except ValueError as exc:
            raise ValueError(f"'{value}' is not a number") from exc

问题原因

Python运行时中,int和float确实是numbers.Number抽象基类的实例(通过isinstance验证),但你使用的PyType 2022.12.15版本的静态类型检查逻辑未将这两种类型与numbers.Number建立子类关联,导致静态检查时认为返回类型不匹配。

内容的提问来源于stack exchange,提问作者Syafiq Kamarul Azman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:15:50