Python报TypeError:NoneType与int不支持'>'比较的问题如何解决
问题根源
你的find_address函数存在分支未返回值的问题:只有当传入的地址能在address_data的[i][1]位置匹配到结果时,才会返回int类型的索引;如果遍历完整个address_data都没有匹配项,函数不会主动返回任何值,Python默认会返回None,这就是报错中NoneType的来源。
报错触发逻辑是:你在find_distance中对两次find_address的返回值做大小比较,其中一次调用返回了None,另一次返回了int,Python不支持这两种类型直接做比较,因此抛出TypeError。
修复步骤
- 补全
find_address的兜底逻辑,避免返回非法的None值,建议直接抛出明确的异常方便定位问题地址:
def find_address(address): i = 0 while i < len(address_data): if address == address_data[i][1]: return i i = i + 1 # 兜底逻辑:找不到地址时抛出明确错误,打印异常地址方便排查 raise ValueError(f"地址匹配失败:未找到地址 {repr(address)},请检查地址格式或数据源")
- 检查入参地址的合法性
触发异常后你可以通过异常提示定位到是哪个地址不存在,然后核对两个地方:
- 传入的地址是不是和
address_data里存储的地址格式完全一致,有没有多余空格、大小写差异、全半角符号差异 - 对应地址是不是确实未录入到
address_data中
可选优化
你可以提前构建地址到索引的映射字典,避免每次调用都遍历列表,提升查找效率:
# 程序初始化阶段执行一次即可,不用每次调用find_address都遍历 address_to_idx = {item[1]: idx for idx, item in enumerate(address_data)} def find_address(address): try: return address_to_idx[address] except KeyError: raise ValueError(f"地址匹配失败:未找到地址 {repr(address)}")
内容的提问来源于stack exchange,提问作者dkeys
相关产品推荐
相关产品推荐

