鱼C论坛

 找回密码
 立即注册
查看: 2050|回复: 8

[已解决]IndexError: list index out of range的代码修改求助

[复制链接]
发表于 2020-10-8 23:44:45 | 显示全部楼层 |阅读模式
5鱼币
各位晚上好,代码运行后说是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[index:]
    txtDict[key] = 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[keys][0:3]
                    destFile.write(w)  # 在标注后的文本文件中插入'&'并写入
                    listFile.write(w + '\n')  # 在标复合词列表文件中并写入此复合词
                    del ss[0:len(sss)]  # 并将其从ss列表中删除
                    print('&'.join(keys.split(' ')), txtDict[keys][0:3])  # 调试用的,可删除此句
                del sss[len(sss) - 1]  # 如果复合词辞典中没有词短语,从后面删除一个字继续比较,直到最后一个字
            if n == 1:  # 当s中的句子只有一个字的时候将其直原样接写入标注后的文本文件中
                m = ss[0]
            else:  # 当s中的句子不是只有一个字的时候
                if ss == []:  # ss列表已经没有字就直接跳出此词句的循环查询
                    continue
                else:  # 将ss中的第一个字前加一个空格符赋值给m变量
                    m = ' ' + ss[0]

            destFile.write(m)  # 将m直原样接写入标注后的文本文件中
            del ss[0]  # 存入m后将ss中的第一个字删除
    if n == 1:  # 在n=1时给标注后的原文中补加句号‘.’
        destFile.write('.')
print('全部完成!')

destFile.close()  # 关闭标注后的文本文件
srcFile.close()  # 关闭目标文本文件
listFile.close()  # 关闭提取的复合词文本文件
最佳答案
2020-10-8 23:44:46
没有数据文件,光这样看代码,很难找到错误。。。。。。。

最佳答案

查看完整内容

没有数据文件,光这样看代码,很难找到错误。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-8 23:44:46 | 显示全部楼层    本楼为最佳答案   
没有数据文件,光这样看代码,很难找到错误。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-9 08:22:04 | 显示全部楼层
疾风怪盗 发表于 2020-10-9 00:48
没有数据文件,光这样看代码,很难找到错误。。。。。。。

早上好,老哥,您也睡挺晚的 哈哈哈 我再试试,实在不行 再找您
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-9 08:59:18 | 显示全部楼层
Amgalang 发表于 2020-10-9 08:22
早上好,老哥,您也睡挺晚的 哈哈哈 我再试试,实在不行 再找您

字面意思就是说你使用了一个不存在的列表索引
比如 列表为空  你对他进行索引  哪怕是0 也不可以  这是比较常见的错误
另一种就是超范围索引,比如列表有5个记录,你用5以上的索引值 也会出错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-9 10:35:27 | 显示全部楼层
列表索引超出范围,也就是说列表没有那么多元素,但是你却要通过索引来查找
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-9 23:13:59 | 显示全部楼层
回帖贴代码请用代码模式
像这样
有自动的行号
不然读起来好累啊
此外,楼主的变量命名不是很规范哦,看ss和sss什么的容易分不清

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

# 或者
try:
    # 语句
except:
    # 手动掩盖报错信息
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

好的,谢谢您
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-10 09:41:36 | 显示全部楼层
狗宁 发表于 2020-10-9 10:35
列表索引超出范围,也就是说列表没有那么多元素,但是你却要通过索引来查找

好的 好的,谢谢您了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

好的,学到了 哈哈哈 谢谢您
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 09:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表