Python程序异常:findFirstOccurence函数返回None问题排查
以下是几种会导致该函数返回None的典型情况及修复思路:
未处理“未找到目标值”的场景
这是最常见的原因:函数仅在找到目标值时返回索引,但遍历完数组仍未找到时,没有显式返回语句,Python会默认返回None。
错误示例:def findFirstOccurence(arr, target): for idx, val in enumerate(arr): if val == target: return idx修复方式:添加未找到时的返回值(比如约定返回-1表示未找到):
def findFirstOccurence(arr, target): for idx, val in enumerate(arr): if val == target: return idx return -1 # 显式返回未找到的标识参数类型不匹配导致比较失效
如果数组元素类型和传入的target类型不一致,会导致所有比较都不成立,最终返回None。比如数组存的是整数[1,2,3],但调用时传入字符串"2";或者数组是自定义对象,直接用==比较未实现正确的相等逻辑。
解决:检查调用时的target类型是否与数组元素一致,自定义对象需重写__eq__方法。数组为空或未正确传入
若传入的数组是空列表[],或者误传了None,函数的循环根本不会执行,直接返回None。
解决:调用前确保传入有效的数组;如果需要处理空数组场景,在函数开头添加判断:def findFirstOccurence(arr, target): if not arr: return -1 # 或根据业务需求返回对应值 for idx, val in enumerate(arr): if val == target: return idx return -1循环逻辑错误导致漏查
比如循环范围写错(如range(len(arr)-1)),导致最后一个元素未被遍历;或者使用了错误的索引方式(比如跳过了某些元素),使得目标值所在位置未被检查到。
解决:检查循环的范围和索引遍历逻辑,推荐用enumerate来同时获取索引和元素,避免手动计算索引出错。特殊值比较逻辑缺陷
当数组元素是浮点数时,直接用==比较可能因为精度问题失效。比如数组里是0.1,但传入的target是0.1,由于浮点数存储的精度误差,比较可能不成立(常见于计算得到的浮点数)。
解决:用精度阈值判断:def findFirstOccurence(arr, target): for idx, val in enumerate(arr): if abs(val - target) < 1e-9: return idx return -1
内容的提问来源于stack exchange,提问作者Arc Official

