鱼C论坛

 找回密码
 立即注册
查看: 2283|回复: 9

[已解决]为什么老是报这样错呢,我觉得我参数给的没错啊

[复制链接]
发表于 2021-2-25 15:49:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import pickle


def save_file():
    boy_file = open('boy_',str(count),'.txt','wb')
    girl_file = open('girl_',str(count),'.txt','wb')

    pickle.dump(boy,boy_file.pkl)
    pickle.dump(girl,girl_file.pkl)
        

    boy_file.close()
    girl_file.close()
    


def split_file(file_name):
    f = open(file_name)
    boy = []
    girl = []
    count = 1

    
    for each_line in f:
        if each_line[:2] == '===':
            save_file(boy,girl,count)
            boy = []
            girl = []
            count += 1

        else:
            (name,content) = each_line.split(':',1)
            if name == '小甲鱼':
                boy.append(content)
            if name == '小客服':
                girl.append(content)
            
    save_file(boy,girl,count) 

    f.close()

split_file('record.txt')



我运行之后老是报这样的错
最佳答案
2021-2-25 18:18:14
无枝为檄 发表于 2021-2-25 18:08
为什么他会把‘===’这行一起split? 如果each_line == '==='时不是不会进入else语句吗? 好奇怪

你可以把 if each_line[:2] == '===': 改成 if "===" in each_line

看看 === 是否在这一行中

截屏2021-02-25 18.15.04.png

没记错的话应该是左闭右开的

而且你这个特别局限,即使你改成了 if each_line[:3] == '===':

因为对应的分隔符的格式一定要是 === 不能是 ====或者其他的任意长度的 ==

要记住一点,用户不一定全都会按照你的想法去执行操作,所以 bug 很有可能一直存在,只是没有被发现
屏幕截图 2021-02-25 154849.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-25 16:09:25 | 显示全部楼层
试一下修改冒号

将英文版冒号修改为中文版冒号
import pickle


def save_file():
    boy_file = open('boy_',str(count),'.txt','wb')
    girl_file = open('girl_',str(count),'.txt','wb')

    pickle.dump(boy,boy_file.pkl)
    pickle.dump(girl,girl_file.pkl)
        

    boy_file.close()
    girl_file.close()
    


def split_file(file_name):
    f = open(file_name)
    boy = []
    girl = []
    count = 1

    
    for each_line in f:
        if each_line[:2] == '===':
            save_file(boy,girl,count)
            boy = []
            girl = []
            count += 1

        else:
            (name,content) = each_line.split(':',1)
            if name == '小甲鱼':
                boy.append(content)
            if name == '小客服':
                girl.append(content)
            
    save_file(boy,girl,count) 

    f.close()

split_file('record.txt')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-2-25 17:11:28 | 显示全部楼层
逃兵 发表于 2021-2-25 16:09
试一下修改冒号

将英文版冒号修改为中文版冒号

还是报错  而且原来文件里的冒号是英文状态的冒号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-25 17:28:04 | 显示全部楼层
你是不是有哪一行源文件不能被分割的,也就是不带有 :

因为split 期待获取两个,但是只获取到了一个,说明并没有被分割成功,按道理分割成功了是会传回两个的(因为你是写了 split(':',1)),但是只传回了一个

你看看是不是有换行什么的

(name,content) = each_line.split(':',1) 先改成 print(each_line.split(':')) 看看会 split 什么出来

后面的 if 判断先注释掉看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-25 17:33:13 | 显示全部楼层
截屏2021-02-25 17.29.42.png

因为你要把切割后的东西传入一个元组,但是应该是有什么没有被成功切割成两个的,如上图所示,就会出现这个问题

可以看看用 try except 去解决

try 切割传给元组 except ValueError 就跳过这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-25 18:08:16 | 显示全部楼层
Daniel_Zhang 发表于 2021-2-25 17:28
你是不是有哪一行源文件不能被分割的,也就是不带有 :

因为split 期待获取两个,但是只获取到了一个,说 ...

file:///C:/Users/%E7%BA%A2/Desktop/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202021-02-25%20180252.png


为什么他会把‘===’这行一起split? 如果each_line == '==='时不是不会进入else语句吗? 好奇怪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-25 18:18:14 | 显示全部楼层    本楼为最佳答案   
无枝为檄 发表于 2021-2-25 18:08
为什么他会把‘===’这行一起split? 如果each_line == '==='时不是不会进入else语句吗? 好奇怪

你可以把 if each_line[:2] == '===': 改成 if "===" in each_line

看看 === 是否在这一行中

截屏2021-02-25 18.15.04.png

没记错的话应该是左闭右开的

而且你这个特别局限,即使你改成了 if each_line[:3] == '===':

因为对应的分隔符的格式一定要是 === 不能是 ====或者其他的任意长度的 ==

要记住一点,用户不一定全都会按照你的想法去执行操作,所以 bug 很有可能一直存在,只是没有被发现
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-25 18:19:36 | 显示全部楼层
无枝为檄 发表于 2021-2-25 18:08
为什么他会把‘===’这行一起split? 如果each_line == '==='时不是不会进入else语句吗? 好奇怪

另外,别使用你电脑路径上传图片,别人看不到的,你是vip,评论的时候最右侧有一个高级模式,去那里面插入图片

普通模式的只能插入互联网上的图片
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-25 20:30:38 | 显示全部楼层
Daniel_Zhang 发表于 2021-2-25 18:18
你可以把 if each_line[:2] == '===': 改成 if "===" in each_line

看看 === 是否在这一行中

成功了 谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-25 20:31:18 | 显示全部楼层
Daniel_Zhang 发表于 2021-2-25 18:19
另外,别使用你电脑路径上传图片,别人看不到的,你是vip,评论的时候最右侧有一个高级模式,去那里面插 ...

ok 谢谢提醒  我刚进小甲鱼不久 还不太会用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 10:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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