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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:32:01