Python统计txt文件单词数程序报字符串索引越界错误求解决方案
问题排查与解决方案
报错原因
- Python中字符串索引从0开始,长度为N的字符串合法索引范围是
0 ~ N-1。你的characternum就是textstr的总长度,while循环判断条件写的i <= characternum,当i等于characternum时,访问textstr[i]已经超出合法索引范围,直接触发越界错误。 - 你的判断逻辑中使用了
textstr[i+1],哪怕把循环条件改成i < characternum,当i走到最后一个索引characternum - 1时,i+1等于characternum,依然会超出索引范围。
修复方案(完全保留你的原有实现思路)
只需要修改while循环的判断条件即可,调整后计数部分代码如下:
i = 0 wordnum = 1 # 循环上限调整为 characternum-1,保证i+1不会越界 while i < characternum - 1: if textstr[i] not in alphabet and textstr[i+1] in alphabet: wordnum += 1 i += 1 # 兼容空文件的边界情况:如果文件内容为空,单词数修正为0 if characternum == 0: wordnum = 0
可选优化点(不影响原有逻辑正确性)
- 你写的统计字符数、转字符串的逻辑是完全正确的,没有问题,可以简化为两行代码,效果完全一致:
textstr = page.read() characternum = len(textstr)
- 读取文件建议使用
with语法,会自动关闭文件,不需要手动调用close(),避免程序异常时文件未关闭的问题,同时注意Windows路径的反斜杠需要转义:
# 路径里的反斜杠写两个转义,或者直接用正斜杠,避免路径识别错误 with open("venv\\harrry_potter.txt", "r", encoding="utf-8") as page: list_of_lines = page.readlines() # 后续原有逻辑不变
内容的提问来源于stack exchange,提问作者Malakkos
相关产品推荐
相关产品推荐

