Python猜数字游戏:input()输入非数字时的错误处理问题
问题修复方案
你的代码崩溃原因很明确:当输入非数字(或空值)触发ValueError后,程序只是打印提示,却继续执行后续的if player_guess < number_real判断——此时player_guess要么是未转换成功的字符串,要么处于未有效赋值的状态,直接和整数number_real比较必然引发错误。
下面是两种可行的修复方式:
方式一:循环获取有效输入(推荐)
通过循环持续要求玩家输入,直到得到合法的整数,确保后续逻辑能安全执行:
import time # 假设已定义number_real和player_name number_real = 50 player_name = "玩家" while True: try: player_guess = input("\n\n\n{} 请输入你的猜测:\n".format(player_name)) player_guess = int(player_guess) break # 输入有效,退出循环 except ValueError: print("{},请输入有效的数字!".format(player_name)) time.sleep(2) print("\n\n\n") # 此时player_guess一定是合法整数,可安全进行判断 if player_guess < number_real: print("猜小了!") elif player_guess > number_real: print("猜大了!") else: print("恭喜你,猜对了!")
方式二:将依赖逻辑放入try块
把所有需要用到player_guess的代码都放在try块内部,这样转换失败时不会执行后续判断:
import time number_real = 50 player_name = "玩家" try: player_guess = input("\n\n\n{} 请输入你的猜测:\n".format(player_name)) player_guess = int(player_guess) # 所有使用player_guess的逻辑都放在这里 if player_guess < number_real: print("猜小了!") elif player_guess > number_real: print("猜大了!") else: print("恭喜你,猜对了!") except ValueError: print("{},请输入有效的数字!".format(player_name)) time.sleep(2) print("\n\n\n") except Exception as ex: print("{},输入出错了,请重新输入数字。".format(player_name)) time.sleep(2) print("\n\n\n")
关键修复点
- 移除了原代码中
except Exception块内的print(player_guess)——转换失败时这个变量要么是无效字符串,要么未被正确赋值,会引发新的错误。 - 优先捕获具体的
ValueError,再处理通用异常,逻辑更清晰。 - 确保只有当
player_guess是合法整数时,才执行后续的大小判断逻辑。
内容的提问来源于stack exchange,提问作者Codi Fredericks
相关产品推荐
相关产品推荐

