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

Python学习遇IndexError: string out of range,求代码排查解决

解决Python字符串处理中的IndexError问题

嘿,我来帮你排查这个IndexError的问题!你遇到的字符串索引越界错误,核心原因是当i是字符串最后一个字符的索引时,你尝试访问string[i+1]——这已经超出了字符串的索引范围(字符串的索引从0开始,最大索引是len(string)-1),自然会触发报错。除此之外,你的代码里还有两个小问题:一是没有处理i=0时访问string[i-1]的逻辑偏差,二是条件判断的写法不符合你实际想要的逻辑。

问题拆解

先看你代码里的风险点:

  • 当i = len(string)-1(最后一个字符)时,你虽然判断了这个情况并添加字符,但后面依然会执行string[i+1]的判断,直接触发越界。
  • 当i=0时,string[i-1]会取到字符串的最后一个字符(Python允许负索引),这显然不是你想要的“前一个字符”的逻辑。
  • 条件string[i+1] or string[i-1] == ' '的写法错误:它的实际逻辑是“只要string[i+1]不为空,或者string[i-1]是空格”就成立,这和你想判断“前后任意一个是空格”的逻辑完全不符。

修复后的代码

我重新整理了你的逻辑,解决了越界问题,同时修正了条件判断:

import string  # 假设你使用标准库的标点和数字集合

def clean_string(input_string):
    punctuation = string.punctuation
    numbers = string.digits
    new_string = ""
    str_length = len(input_string)
    
    for idx, char in enumerate(input_string):
        if char in punctuation:
            # 处理最后一个字符,直接添加后跳过后续判断
            if idx == str_length - 1:
                new_string += char
                continue
            # 处理第一个字符,避免访问idx-1越界
            if idx == 0:
                # 检查后一个字符是否为空格或标点,是则跳过
                if input_string[idx+1] == ' ' or input_string[idx+1] in punctuation:
                    continue
                new_string += char
                continue
            # 中间字符:检查前后是否有空格或标点,有则跳过
            prev_char = input_string[idx-1]
            next_char = input_string[idx+1]
            if (prev_char == ' ' or prev_char in punctuation) or \
               (next_char == ' ' or next_char in punctuation):
                continue
            new_string += char
        elif char in numbers:
            new_string += ' '
        else:
            new_string += char
    return new_string

关键修改点

  1. 用enumerate遍历:同时获取索引和字符,比手动计算range(len(string))更简洁直观。
  2. 越界防护:分别处理idx=0(第一个字符)和idx=str_length-1(最后一个字符)的情况,避免访问不存在的索引。
  3. 修正条件逻辑:把错误的or判断拆分成明确的“前后字符是否为空格/标点”的判断,确保逻辑符合你的需求。
  4. 提前计算长度:避免循环中重复计算len(input_string),提升一点效率。

你可以把这个函数替换原来的逻辑,测试一下应该就不会再出现索引越界的错误啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:55:35