IndexError: list index out of range的代码修改求助
各位晚上好,代码运行后说是46行: IndexError: list index out of range 求修改代码,谢谢。我的代码:
dicFile = open('9999.txt', 'r')# 打开数据
print('开始装载数据...')
txtDict = {}# 建立字典
while True:
line = dicFile.readline()
if line == '':
break
index = line.find(':')# 以tab键为分割
key = line[:index]
value = line
txtDict = value# 加入字典
dicFile.close()
##查找字典
srcFile = open('1000万分解01.txt', 'r',encoding='UTF-8')# 要匹配的key
destFile = open('1000万分解01标注文件.txt', 'w',encoding='UTF-8')# 符合字典的写入里面(创建一个标注式的文件)
listFile = open("1000万分解01里的复合词集合.txt", "w",encoding='UTF-8')# 提取的复合词列表
while True:
str = srcFile.readline()# 读取一个自然段,存入str
str = str.replace('[', ' ').replace(']', ' ')
str = str.replace(' ', ' ').replace(' ', ' ').replace('', ' ').replace('=', ' ')
n = 0
if str == '000000':# 判断结尾标记,发现六个零就结束运行
break
if '年级' in str:# 判断年级分册标记,遇到年级分册标记就将其写入复合词列表,txt
listFile.write(str + '\n')
print(str)# 调试用的,可删除此句
s = str.split('.')# 将str以句号‘.’分隔符,分隔成若干句子,存入列表s
for words in s:# 在句子列表中,依次提取每个句子
ss = words.split(' ')# 将提取的句子以空格为分隔符,分割成词序列列表
while len(ss) > 0:# 当词列表长度大于零时,
sss = ss[:]# 将其转存入sss列表中
n = n + 1
while len(sss):
# 对比从这里开始
keys = ' '.join(sss)# 将sss列表中插入空格符恢复成短语
print(keys)# 调试用的,可删除此句
if keys in txtDict:# 如果此短语在复合词词典中存在
w = ' ' + '&'.join(keys.split(' ')) + txtDict
destFile.write(w)# 在标注后的文本文件中插入'&'并写入
listFile.write(w + '\n')# 在标复合词列表文件中并写入此复合词
del ss# 并将其从ss列表中删除
print('&'.join(keys.split(' ')), txtDict)# 调试用的,可删除此句
del sss# 如果复合词辞典中没有词短语,从后面删除一个字继续比较,直到最后一个字
if n == 1:# 当s中的句子只有一个字的时候将其直原样接写入标注后的文本文件中
m = ss
else:# 当s中的句子不是只有一个字的时候
if ss == []:# ss列表已经没有字就直接跳出此词句的循环查询
continue
else:# 将ss中的第一个字前加一个空格符赋值给m变量
m = ' ' + ss
destFile.write(m)# 将m直原样接写入标注后的文本文件中
del ss# 存入m后将ss中的第一个字删除
if n == 1:# 在n=1时给标注后的原文中补加句号‘.’
destFile.write('.')
print('全部完成!')
destFile.close()# 关闭标注后的文本文件
srcFile.close()# 关闭目标文本文件
listFile.close()# 关闭提取的复合词文本文件
没有数据文件,光这样看代码,很难找到错误。。。。。。。 疾风怪盗 发表于 2020-10-9 00:48
没有数据文件,光这样看代码,很难找到错误。。。。。。。
早上好,老哥,您也睡挺晚的 哈哈哈 我再试试,实在不行 再找您 Amgalang 发表于 2020-10-9 08:22
早上好,老哥,您也睡挺晚的 哈哈哈 我再试试,实在不行 再找您
字面意思就是说你使用了一个不存在的列表索引
比如 列表为空你对他进行索引哪怕是0 也不可以这是比较常见的错误
另一种就是超范围索引,比如列表有5个记录,你用5以上的索引值 也会出错 列表索引超出范围,也就是说列表没有那么多元素,但是你却要通过索引来查找 {:10_277:}回帖贴代码请用代码模式像这样
有自动的行号
不然读起来好累啊
此外,楼主的变量命名不是很规范哦,看ss和sss什么的容易分不清
对于报错的问题,可以在调用索引之前加上验证条件,例如if len(ss) >0:
# 或者
try:
# 语句
except:
# 手动掩盖报错信息 wp231957 发表于 2020-10-9 08:59
字面意思就是说你使用了一个不存在的列表索引
比如 列表为空你对他进行索引哪怕是0 也不可以这是 ...
好的,谢谢您 狗宁 发表于 2020-10-9 10:35
列表索引超出范围,也就是说列表没有那么多元素,但是你却要通过索引来查找
好的 好的,谢谢您了 Clement_Levi 发表于 2020-10-9 23:13
回帖贴代码请用代码模式
此外,楼主的变量命名不是很规范哦,看ss和sss什么的容易分不清
好的,学到了 哈哈哈 谢谢您
页:
[1]