Python指定位置搜索自定义字符遇IndexError报错及代码优化求助
修复字符串索引错误并优化字符位置匹配代码
我来帮你搞定这两个问题!首先咱们先拆解你遇到的核心问题,再一步步简化代码:
错误原因分析
你遇到的IndexError: string index out of range通常有两个触发场景:
- 用户输入长度不足:如果用户只输入了1位数字(比如"3"),那
User_number[1]就会因为字符串长度不够而报错 - 文本行长度不够:如果文本里某一行的字符数少于12个(你要取
line[10]和line[11],索引从0开始,所以行至少得有12个字符才不会越界)
另外你的代码还有些可以简化的地方:比如手动管理文件打开/关闭容易漏写close()(你代码里f.close还少了括号,应该是f.close()),拆分单个字符的写法也没必要。
优化后的代码
这里给你一个更安全、简洁的版本:
# -*- coding: utf-8 -*- # 获取用户输入并做合法性校验 while True: user_number = raw_input('What number would you like to single out from your text?') if len(user_number) >= 2: target_chars = user_number[:2] break print("请输入至少两位的内容!") # 使用with上下文管理器自动处理文件打开/关闭 with open("text.txt", 'r') as f, open("Modded_text.txt", "w") as f4: for line in f: # 先去掉换行符再检查行长度,避免索引越界 cleaned_line = line.rstrip('\n') if len(cleaned_line) >= 12: # 直接截取对应位置的子串做匹配,比拆分单个字符更简洁 if line[10:12] == target_chars: f4.write(line)
代码优化说明
- 输入校验:用循环确保用户输入至少两位内容,从源头避免索引错误
- 上下文管理器
with:自动处理文件的打开和关闭,不用手动调用close(),还能避免异常导致的文件未关闭问题 - 简化匹配逻辑:直接用
line[10:12]截取目标位置的子串,和用户输入的前两位对比,比拆分单个字符再判断高效得多 - 行长度检查:先判断行去掉换行符后的长度是否足够,避免访问不存在的索引位置
内容的提问来源于stack exchange,提问作者J.Titor
相关产品推荐
相关产品推荐

