无枝为檄 发表于 2021-2-25 15:49:17

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

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')



我运行之后老是报这样的错{:10_266:}

逃兵 发表于 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')

无枝为檄 发表于 2021-2-25 17:11:28

逃兵 发表于 2021-2-25 16:09
试一下修改冒号

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

还是报错{:10_266:}而且原来文件里的冒号是英文状态的冒号

Daniel_Zhang 发表于 2021-2-25 17:28:04

你是不是有哪一行源文件不能被分割的,也就是不带有 :

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

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

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

后面的 if 判断先注释掉看看

Daniel_Zhang 发表于 2021-2-25 17:33:13



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

可以看看用 try except 去解决

try 切割传给元组 except ValueError 就跳过这个

无枝为檄 发表于 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语句吗? 好奇怪

Daniel_Zhang 发表于 2021-2-25 18:18:14

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

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

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



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

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

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

要记住一点,用户不一定全都会按照你的想法去执行操作,所以 bug 很有可能一直存在,只是没有被发现{:10_269:}

Daniel_Zhang 发表于 2021-2-25 18:19:36

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

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

普通模式的只能插入互联网上的图片

无枝为檄 发表于 2021-2-25 20:30:38

Daniel_Zhang 发表于 2021-2-25 18:18
你可以把 if each_line[:2] == '===': 改成 if "===" in each_line

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


成功了 谢谢!

无枝为檄 发表于 2021-2-25 20:31:18

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

ok 谢谢提醒我刚进小甲鱼不久 还不太会用{:10_254:}
页: [1]
查看完整版本: 为什么老是报这样错呢,我觉得我参数给的没错啊