Python报错:局部变量'num1'赋值前引用,求解决办法
解决
local variable 'num1' referenced before assignment 错误 错误根源
你遇到的这个报错核心问题很明确:当用户输入非整数内容时,num1 根本没被成功赋值,但代码后续还尝试去引用它做判断。
拆解下你的代码逻辑:
- 当输入不是整数时,
try块里的num1 = int(input(...))会直接失败,跳到except块打印提示。 - 但
except块执行完后,代码会继续往下走,执行if num1 < 0:,这时候num1从来没被定义过,自然触发"引用未赋值变量"的错误。
除此之外,你的代码还有几个逻辑漏洞需要一起修正:
- 成绩等级的判断结构混乱(
if和elif搭配错误,会导致部分条件永远不会被触发) - 使用
return会直接退出函数,无法实现"重复输入直到正确"的循环需求 - 范围检查的位置不合理,没有和整数转换的逻辑绑定
修正后的完整代码
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




