Python使用try-except块运行时报Name undefined变量未定义错误怎么解决?
错误原因
你的代码中top_range变量仅在try代码块内赋值,当用户输入的范围上限无法转换为整数时,会触发ValueError进入except分支,此时top_range从未完成定义,后续执行random.randint(0, top_range)时调用了未定义的变量,就会触发「名称未定义」报错。
解决方案
这里提供两种常用修复方案:
方案1:异常分支直接终止程序
在except分支打印提示后直接终止程序,避免后续执行逻辑调用未定义变量,修改后的异常处理段如下:
try: top_range = int(input("请输入范围上限:")) except ValueError: print("请输入整数") exit() # 输入不合法时直接退出程序
方案2:增加循环校验,强制用户输入合法值
体验更友好的处理方式,循环接收用户输入,直到输入合法整数才继续后续逻辑,完整修改后代码如下:
# 导入random包 import random # 循环校验范围上限输入 while True: try: top_range = int(input("请输入范围上限:")) break except ValueError: print("输入不合法,请输入整数") # 系统生成随机数 sys_guess = random.randint(0, top_range) print("系统生成的数字为 =", sys_guess) print("请尝试猜出该数字,最多可猜测3次......!") # 初始化猜测次数计数器 guess = 0 # 猜测逻辑 while sys_guess >= 0: user_input = int(input("请输入你猜测的数字: ")) if sys_guess != user_input: # 猜错时猜测次数+1 guess += 1 print("猜测错误-->") if guess == 2: print("你仅剩1次猜测机会") if guess > 2: print("已达最大猜测次数,挑战失败!!!!!") break else: # 猜对时猜测次数+1 guess += 1 print("!恭喜***猜对了***!") break # 打印总猜测次数 print("总猜测次数=", guess)
注:现有代码中用户猜数字的输入部分也未做异常处理,如果用户输入非整数同样会报错,你可以参考范围上限的校验逻辑自行补充。
内容的提问来源于stack exchange,提问作者Tharan Manish
相关产品推荐
相关产品推荐

