You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python for循环结合break、else使用时触发NameError报错

报错原因
  • 核心问题是代码错误使用eval()包裹input()方法:Python3中input()会直接将用户输入读取为字符串类型,当你输入Tim时,原生input()返回的就是字符串值"Tim";外层嵌套eval()后,解释器会把输入内容当做Python表达式执行,裸写的Tim会被识别为变量名,而当前代码作用域中没有定义名为Tim的变量,因此触发NameError。
  • 原代码还存在不规范写法:用Python内置类型名list作为自定义变量名,会覆盖内置list类的引用,可能引发其他隐性问题。
  • 补充说明:这个笔误大概率是作者混淆了Python2与Python3的输入API:Python2版本的input()自带eval解析逻辑,读取纯字符串需要调用raw_input(),Python3则将raw_input()重命名为input(),移除了默认的eval行为。
修复方案

移除input()外层多余的eval()调用,同时替换掉覆盖内置类型的变量名即可,修复后可运行代码如下:

name_list = ['Jack', 'Jill', 'Tim', 'Dave']
name = input('Type a name: ')
for i in range(len(name_list)):
    if name_list[i] == name:
        print(name, 'is number', i + 1, 'on the list')
        break
else:
    print(name, 'is not on the list')

修复后运行无需给输入的姓名加引号,直接输入名称即可得到正确匹配结果,不会再触发名称错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:12:19