You need to enable JavaScript to run this app. Python 3.9.x 出现未解析引用'i'报错 如何修改代码正常运行
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.9.x 出现未解析引用'i'报错 如何修改代码正常运行

报错原因
  • 触发*未解析引用'i'*报错的核心原因是代码中循环块的变量定义存在两处硬伤:
    • 循环声明为for card in range(len(cards)),本意是遍历cards列表的索引值,但将索引变量错误命名为card
    • 循环体中直接使用从未在作用域内定义的i作为列表下标取值,同时将本应代表索引的card变量重新赋值为cards[i],存在变量名错位、冗余赋值的逻辑冲突
代码修正方案

根据原有代码的功能意图,提供两种可直接运行的无错写法:

最小改动适配版

仅修正变量定义错位、未定义引用的问题,尽可能保留原代码的结构逻辑:

for i in range(len(cards)):
    print(f"{i+1} - {cards[i]}")

# get choice
choice = get_int_input(1, len(cards))
# get card
return cards[choice-1] if choice else None

改动点说明:

  • 将原循环的变量名从错位的card改为实际使用的i,匹配循环体中对i的引用
  • 删除原循环体中冗余的card = cards[i]赋值行,避免变量重复定义带来的逻辑混乱

规范写法优化版

采用Python内置的枚举遍历方法,从根源上避免手动维护索引带来的错位问题:

for serial_num, card in enumerate(cards, start=1):
    print(f"{serial_num} - {card}")

# get choice
choice = get_int_input(1, len(cards))
# get card
return cards[choice-1] if choice else None

优化说明:

  • 借助enumerate的start=1参数直接生成从1开始的展示序号,无需在print语句中手动拼接i+1
  • 遍历过程中同时拿到对应序号和卡片内容,不会出现下标错位、未定义变量的问题,代码可读性更高

内容的提问来源于stack exchange,提问作者rowan333

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.10 14:06:02