Python实现sum_numeric求和函数:如何安全转换可转整数的字符串避免报错
原有代码的问题拆解
- 初始版本输出12的原因:代码仅当参数本身是int类型时才累加到total,对所有字符串类型的参数直接执行跳过逻辑,哪怕字符串内容可以正常转成整数也没有做转换处理,因此漏加了字符串形式的20,最终结果比预期少20。
- 第二次修改代码的报错原因:
- 未对不可转换的内容做异常拦截:碰到'd'这类无法转成整数的字符串时,直接执行
int(i)会抛出ValueError - 累加逻辑错误:就算字符串可以正常转换为整数,代码累加时加的是原始字符串而非转换后的整数,因此触发“int和str不能执行+=操作”的TypeError
- 未对不可转换的内容做异常拦截:碰到'd'这类无法转成整数的字符串时,直接执行
无报错的正确实现思路
要在不触发异常的前提下完成求和,最稳妥的方式是用异常捕获替代硬类型判断,这种方式不需要写复杂的字符串格式校验规则,鲁棒性比硬判类型、正则匹配字符串格式的方式更高,也不会因为边界情况漏判可转换的内容:
- 遍历每一个传入参数,统一尝试将其转换为整数
- 转换成功时,把转换后的整数值累加到total
- 转换过程中碰到ValueError、TypeError时,直接跳过当前参数,不打断程序运行
可运行的代码示例
def sum_numeric(*args): total = 0 for item in args: try: num = int(item) total += num except (ValueError, TypeError): continue return total
验证效果
调用sum_numeric(1,2,3,'20','d',6)时:
- 1、2、3、6本身为整数,直接纳入累加
- '20'可正常转换为整数20,纳入累加
- 'd'无法转换为整数,直接跳过
- 最终累加结果为1+2+3+20+6=32,和预期输出一致
内容的提问来源于stack exchange,提问作者LukaszKopyszko
相关产品推荐
相关产品推荐

