You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python报错:局部变量'num1'赋值前引用,求解决办法

解决 local variable 'num1' referenced before assignment 错误

错误根源

你遇到的这个报错核心问题很明确:当用户输入非整数内容时,num1 根本没被成功赋值,但代码后续还尝试去引用它做判断

拆解下你的代码逻辑:

  • 当输入不是整数时,try 块里的 num1 = int(input(...)) 会直接失败,跳到 except 块打印提示。
  • except 块执行完后,代码会继续往下走,执行 if num1 < 0:,这时候 num1 从来没被定义过,自然触发"引用未赋值变量"的错误。

除此之外,你的代码还有几个逻辑漏洞需要一起修正:

  1. 成绩等级的判断结构混乱(ifelif 搭配错误,会导致部分条件永远不会被触发)
  2. 使用 return 会直接退出函数,无法实现"重复输入直到正确"的循环需求
  3. 范围检查的位置不合理,没有和整数转换的逻辑绑定

修正后的完整代码

def main():
    while True:
        try:
            num1 = int(input("请输入成绩(0-100):"))
            # 先检查成绩范围是否合法
            if not 0 <= num1 <= 100:
                print('Sorry, this program only accepts values between 0 and 100.')
                continue  # 回到循环开头,让用户重新输入
            # 成绩等级判断:从高到低用完整的if-elif-else链
            if num1 >= 90:
                print('Your letter grade is A')
            elif num1 >= 80:
                print('Your letter grade is B')
            elif num1 >= 70:
                print('Your letter grade is C')
            elif num1 >= 60:
                print('Your letter grade is D')
            else:
                print('Your letter grade is F')
            break  # 输入合法,退出循环
        except ValueError:
            # 专门处理非整数输入的情况
            print('Sorry, this program only accepts integer values between 0 and 100.')

main()

关键修改点说明

  • 修复未定义变量问题:把范围检查放到 try 块内部,这样只有当 num1 成功被赋值为整数时,才会执行后续判断;如果输入非整数,直接在 except 块提示后回到循环,不会触碰任何引用 num1 的逻辑。
  • 调整循环控制逻辑:用 continue 处理非法输入(让用户重新输入),用 break 在输入正确后退出循环,替代原来的 return,保证循环能正常完成"反复输入直到正确"的需求。
  • 优化等级判断逻辑:改用完整的 if-elif-else 链,从最高分到最低分依次判断,避免逻辑冲突(比如原来的结构里,num1 >=80 的条件永远不会被90分以上的成绩触发,但混乱的写法容易让人误解)。
  • 细化错误提示:区分"非整数输入"和"范围超出"两种错误,让用户能更清晰地知道自己哪里输错了。

内容的提问来源于stack exchange,提问作者Khyran Bush Student

火山引擎 最新活动