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
相关产品推荐
相关产品推荐

