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

战舰游戏项目:try-except错误处理与坐标验证问题排查

问题修复方案

一、当前try-except失效的核心原因

input()函数会把任何用户输入都转为字符串返回,不会主动抛出ValueError,所以你的try块永远不会触发except分支,这是问题的根源。

二、先修正check_validity验证函数

原函数存在逻辑错误:循环第一次迭代就直接返回结果,根本没遍历完所有字典键。直接简化成判断坐标是否在字典键集合里即可:

def check_validity(coordinate):   
    # 直接判断坐标是否在字典键中,无需多余循环
    return coordinate in coordinates_dict.keys()

三、用if-else+while循环实现输入验证(推荐方案)

既然try-except在这里没必要,直接用循环结合验证函数,就能实现“无效输入重新提示”的需求:

def prompting():
    while True:
        x = input('Please select the coordinate at which you would like to begin placing the aircraft carrier (5-units):')
        if check_validity(x):
            # 验证通过,跳出循环并返回有效坐标
            return x
        else:
            # 验证失败,提示后继续循环等待输入
            print('Coordinates are indicated by letter A - J on the vertical axis and 1 - 10 on the horizontal axis. Please use the values to indicate a valid coordinate:')

# 调用函数获取有效坐标
valid_coordinate = prompting()

四、可选:需要try-except的场景

如果后续要拆分坐标的字母和数字部分(比如把数字转成整数),这时try-except才有用。示例如下:

def check_validity(coordinate):
    # 验证坐标格式:首字母A-J,后续是1-10的数字
    if len(coordinate) < 2:
        return False
    letter_part = coordinate[0].upper()
    num_part = coordinate[1:]
    # 尝试将数字部分转为整数,失败则返回False
    try:
        num = int(num_part)
    except ValueError:
        return False
    # 最终验证范围
    return letter_part in 'ABCDEFGHIJ' and 1 <= num <=10

def prompting():
    while True:
        x = input('Please select the coordinate at which you would like to begin placing the aircraft carrier (5-units):')
        if check_validity(x):
            return x
        else:
            print('Coordinates are indicated by letter A - J on the vertical axis and 1 - 10 on the horizontal axis. Please use the values to indicate a valid coordinate:')

valid_coordinate = prompting()

内容的提问来源于stack exchange,提问作者danielpintard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:30:14