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

字符串数字求和代码触发IndexError索引越界,请求问题排查

问题排查:提取连续数字求和时的IndexError错误

错误原因

你的代码触发IndexError的核心原因是:当st为空字符串时,直接访问st[-1]会导致索引越界。比如输入字符串开头的'a'是第一个字符,此时st还没有被赋值任何内容,进入else分支后执行st[-1].isdigit(),空字符串没有任何元素,自然抛出索引越界错误。

另外,原代码还有潜在问题:如果连续遇到多个非数字字符,会重复添加逗号,最后split时可能产生空字符串元素,影响求和结果。

修复原代码方案

修改else分支的判断逻辑,先检查st是否非空,再判断最后一个字符是否为数字;同时处理末尾可能存在的逗号,避免split出空元素:

s = "ab12cd23ed456gh789"
st = ''
for letter in s:
    if letter.isdigit():
        st += letter
    else:
        # 先确保st非空,且最后一个字符是数字时才添加分隔符
        if st and st[-1].isdigit():
            st += ','
# 移除末尾可能多余的逗号
st = st.rstrip(',')
# 分割并转成整数,过滤空字符串
num_list = [int(num) for num in st.split(',') if num]
print(num_list)
print(sum(num_list))

更简洁的正则表达式方案

提取连续数字这类模式匹配场景,用正则表达式会更高效简洁,直接匹配所有连续数字串:

import re

s = "ab12cd23ed456gh789"
# 匹配所有连续的数字序列
num_strings = re.findall(r'\d+', s)
# 转换为整数并求和
num_ints = [int(num) for num in num_strings]
total = sum(num_ints)
# 按预期格式输出
print(f"{' + '.join(num_strings)} = {total}")

运行后直接输出:12 + 23 + 456 + 789 = 1280,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:01:10