← 中文资源

简体中文版本

Python TypeError: unsupported operand type(s)

修复 Python 的 TypeError:对不兼容类型使用运算符(如 str + int、None + float),通过显式转换或输入校验解决。

阅读英文原文

症状

算术运算报出形如 unsupported operand type(s) for +: 'int' and 'str' 的错误。通常只在真实输入下出现,而开发时用的硬编码值不会触发。

诊断

打印具体的类型:

total = 0
for raw in values:
    print(type(raw))
    total += raw

若 raw 打印为 <class 'str'>,它就是问题根源。NoneType 操作数通常意味着某个辅助函数在部分路径上没有返回值。

修复

在边界处做转换并拒绝非法输入:

def to_number(raw: str) -> float:
    try:
        return float(raw)
    except ValueError as exc:
        raise ValueError(f'not a number: {raw!r}') from exc

total = sum(to_number(v) for v in values)

验证

用相同数据重跑,求和结果为数值且不再抛 TypeError。在测试中传入非数字字符串,断言抛出清晰的 ValueError。