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

Python字符串转int触发NameError,求作业程序问题排查修复

问题排查与修复方案

核心问题分析

  1. NameError触发原因:当输入非有效数字(比如'f')时,try块里的Numbers = int(input(...))执行失败,变量Numbers根本没被定义,后面的for Numbers in [Numbers]自然找不到这个变量,直接报错。
  2. 'done'输入逻辑错误:现在你先把输入转成整数再判断是否是'done',但'done'转int本身就会触发异常,永远走不到break的逻辑。
  3. 冗余的for循环:你用for Numbers in [Numbers]完全没必要,直接处理单个数字就行,这属于多余的代码。

修复后的代码

largest = None
smallest = None
while True:
    user_input = input("Enter a number: ")
    # 先判断是否输入'done',提前退出循环
    if user_input == 'done':
        break
    # 再尝试转换为整数
    try:
        number = int(user_input)
    except ValueError:
        print('invalid number')
        # 跳过后续处理,进入下一次循环
        continue
    # 更新最大值和最小值
    if largest is None or number > largest:
        largest = number
    if smallest is None or number < smallest:
        smallest = number

print(largest)
print(smallest)

关键修改点

  • 调整输入判断顺序:先检查输入是否为'done',避免转int的异常,确保能正常退出循环。
  • 明确捕获ValueError:不要用裸except,只捕获转换整数失败的异常,更安全。
  • 避免未定义变量:只有当转换成功后才会执行后续的最大值最小值更新,无效输入直接continue跳过,不会引用未定义的变量。
  • 简化逻辑:去掉冗余的for循环,直接用转换后的number变量更新最大最小值,代码更简洁。
  • 变量名规范:改用小写字母加下划线的命名风格(比如largest而非Largest),符合Python的PEP8规范。

测试输入7、2、bob、10、4后,程序会输出10和2,完全符合作业要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:06:46