症状
算术运算报出形如 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。