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

如何查找float()函数可能抛出的所有异常类型

如何查找float()可能抛出的所有异常类型

我知道调用float("foo")会抛出ValueError,因此编写了如下方法:

def cast_to_float(value: str) -> float:
    try:
        return float(value)
    except ValueError as e:
        # 处理异常

但我刚意识到float()还可能抛出OverflowError,因此想了解是否还有其他未捕获的异常类型。我清楚使用except Exception是不良实践,且已经查阅过官方文档和IDE的“转到定义”功能,未找到异常抛出的相关信息。


可行的解决方法

1. 查看CPython源码实现

Python的内置float()函数底层由CPython实现,直接查看源码是最准确的方式。核心逻辑在Objects/floatobject.c文件的PyFloat_FromString函数中,能找到它可能抛出的异常:

  • TypeError:传入的参数类型无法转换为浮点数时(比如传入列表、None等非字符串/非数值类型)
  • ValueError:参数类型合法但格式无效时(比如"1.2.3"这类无法解析的字符串)
  • OverflowError:数值超出浮点数可表示范围时(比如"1e400",超过Python浮点数最大范围~1.8e308)

2. 手动做边界测试

通过构造各种极端输入,实际测试float()的异常抛出情况:

  • 测试类型不兼容:float([]) → 抛出TypeError
  • 测试超大数值:float("1e400") → 抛出OverflowError
  • 测试无效格式:float("abc")、float("1.2.3") → 抛出ValueError
  • 测试None输入:float(None) → 抛出TypeError

3. 参考Python类型转换的通用规则

内置类型转换函数通常遵循统一的异常逻辑:

  • 类型不匹配时抛出TypeError
  • 类型匹配但值无法解析时抛出ValueError
  • 值超出目标类型的表示范围时抛出OverflowError

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:12:38