Python自定义四舍五入函数my_round()出现NoneType索引错误求排查
报错原因排查
核心根源
报错确实是indexer1存在None的可能性导致的,具体可以拆解为以下3个问题:
index_decider函数没有覆盖全返回场景:只有当传入的listA中存在.字符时才会返回int类型的索引值,若列表中没有小数点,函数执行完成后没有显式return,默认返回None。my_round中的调用逻辑错误:你在逐字符把num1的内容追加到listA的循环中,每次追加后就立即调用index_decider,在小数点还没被追加到listA的前几次调用中,index_decider都会返回None,直接用None作为列表下标就会触发你遇到的报错。- 隐藏的类型错误未被触发:就算
indexer1拿到了正确的整数索引,num1是输入字符串转换来的列表,内部元素都是字符串类型,直接执行num1[indexer1] + 1会触发字符串与整数相加的类型错误。
修复建议
- 调整
index_decider的调用时机:等listA组装完完整的输入数字字符后,再调用一次index_decider计算目标索引,不要放在追加字符的循环内重复调用。 - 补充
index_decider的边界逻辑:如果输入的待处理数字是没有小数点的整数,补充对应返回逻辑,或者增加输入校验抛出明确的错误提示。 - 调整数值计算逻辑:从
num1中取到对应位置的字符后,先转成int类型再执行加减运算,示例修改如下:plus = int(num1[indexer1]) + 1 minus = int(num1[indexer1]) - 1
内容的提问来源于stack exchange,提问作者Samwise Stafford
相关产品推荐
相关产品推荐

