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

Valid position in array相关代码如何在索引越界时返回False

棋盘位置合法性校验修复方案

问题原因

原代码没有对入参pos的索引范围做前置校验,直接使用pos[0]、pos[1]访问numbers、letters列表,当索引值超出列表长度范围时,会直接抛出IndexError异常,无法返回预期的布尔值。

修改思路

  • 增加入参前置校验:先确认pos为长度为2的序列,且两个索引值都落在[0, n)的合法区间内,不满足条件直接返回False
  • 对后续逻辑增加异常捕获兜底,处理其他可能的格式错误,出现异常时统一返回False

修改后代码

def extract_pos(n, str_pos):
    # 补充extract_pos自身的边界校验,避免非法字符报错
    letters = [chr(x + ord('a')) for x in range(n)]
    numbers = [str(x) for x in range(1, n + 1)]
    numbers.reverse()
    if len(str_pos) < 2 or str_pos[0] not in letters or str_pos[1:] not in numbers:
        return None
    res = (numbers.index(str_pos[1:]), letters.index(str_pos[0]))
    return res

def is_in_board(n, pos):
    # 前置校验:过滤索引越界的非法输入
    if not (isinstance(pos, (tuple, list)) and len(pos) == 2):
        return False
    row, col = pos
    if row < 0 or row >= n or col < 0 or col >= n:
        return False
    # 异常兜底,处理其他意外情况
    try:
        letters = [chr(x + ord('a')) for x in range(n)]
        numbers = [str(x) for x in range(1, n + 1)]
        numbers.reverse()
        pos_str = ''.join([letters[col], numbers[row]])
        return extract_pos(n, pos_str) is not None
    except Exception:
        return False

效果说明

前置校验环节会直接拦截所有索引越界的输入,不会执行后续的列表元素访问操作,从根源避免越界异常。额外增加的异常捕获逻辑可以兜底处理其他未预见的输入问题,保证函数始终返回布尔类型的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:09:00