Amgalang 发表于 2020-10-8 23:44:45

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-8 23:44:46

没有数据文件,光这样看代码,很难找到错误。。。。。。。

Amgalang 发表于 2020-10-9 08:22:04

疾风怪盗 发表于 2020-10-9 00:48
没有数据文件,光这样看代码,很难找到错误。。。。。。。

早上好,老哥,您也睡挺晚的 哈哈哈 我再试试,实在不行 再找您

wp231957 发表于 2020-10-9 08:59:18

Amgalang 发表于 2020-10-9 08:22
早上好,老哥,您也睡挺晚的 哈哈哈 我再试试,实在不行 再找您

字面意思就是说你使用了一个不存在的列表索引
比如 列表为空你对他进行索引哪怕是0 也不可以这是比较常见的错误
另一种就是超范围索引,比如列表有5个记录,你用5以上的索引值 也会出错

狗宁 发表于 2020-10-9 10:35:27

列表索引超出范围,也就是说列表没有那么多元素,但是你却要通过索引来查找

Clement_Levi 发表于 2020-10-9 23:13:59

{:10_277:}回帖贴代码请用代码模式像这样
有自动的行号
不然读起来好累啊
此外,楼主的变量命名不是很规范哦,看ss和sss什么的容易分不清

对于报错的问题,可以在调用索引之前加上验证条件,例如if len(ss) >0:

# 或者
try:
    # 语句
except:
    # 手动掩盖报错信息

Amgalang 发表于 2020-10-10 09:41:05

wp231957 发表于 2020-10-9 08:59
字面意思就是说你使用了一个不存在的列表索引
比如 列表为空你对他进行索引哪怕是0 也不可以这是 ...

好的,谢谢您

Amgalang 发表于 2020-10-10 09:41:36

狗宁 发表于 2020-10-9 10:35
列表索引超出范围,也就是说列表没有那么多元素,但是你却要通过索引来查找

好的 好的,谢谢您了

Amgalang 发表于 2020-10-10 09:42:15

Clement_Levi 发表于 2020-10-9 23:13
回帖贴代码请用代码模式
此外,楼主的变量命名不是很规范哦,看ss和sss什么的容易分不清



好的,学到了 哈哈哈 谢谢您
页: [1]
查看完整版本: IndexError: list index out of range的代码修改求助