鱼C论坛

 找回密码
 立即注册
查看: 936|回复: 13

[已解决](初学者)程序报错,不知道怎么改,求助。

[复制链接]
发表于 2020-2-27 08:52:26 | 显示全部楼层 |阅读模式

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

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

x
python零基础教学第29讲《文件:一个任务》中。
f = open('e:\\py专用文件夹\\4TM.txt')
boy = []
girl = []
count = 1

for each_line in f:
    if each_line[:6] != '======':
        (role,line_spoken) = each_line.split (':',1)
        if role == '小客服':
            boy.append(line_spoken)
        if role == '小甲鱼':
            girl.append(line_spoken)

显示出错的是这一行      (role,line_spoken) = each_line.split (':',1)
报错原因:Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\P语言\text2.py.py", line 8, in <module>
    (role,line_spoken) = each_line.split (':',1)
ValueError: need more than 1 value to unpack

希望大佬帮忙看看该怎么改。我是python3.33版本。
最佳答案
2020-2-27 09:31:51
CC诗羽 发表于 2020-2-27 09:26
冒号这个问题,,,我一开始就把文本中的全改成英文冒号了。。程序运行过程中for循环第一次成了,然后第 ...

在此行 (role,line_spoken) = each_line.split (':',1)
前面加上一句 print(each_line),看看报错前each_line的内容是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-27 10:11:32 | 显示全部楼层
解决了,单纯的文本问题,(我就是脑子抽了)。是从百度复制的,复制过来后没换行,我就自行还行了,然后结果就是读文本时候莫名的多了一个 '\n' 换行符,然后读取失败了。。从论坛复制过去之后就成功了。。

反正表面上看,论坛复制的和从百度复制后自己自行换行后的样子是一模一样的。但for循环后print出来的,第二个就多了一个换行。。。这个问题大佬能告知一下原因么??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-27 08:55:41 | 显示全部楼层
改成这样试试:
  1. (role,line_spoken) = each_line.split (':',num = 1)
复制代码

而且我这里没有报错啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-27 09:05:34 | 显示全部楼层
qiuyouzhi 发表于 2020-2-27 08:55
改成这样试试:

而且我这里没有报错啊

我知道,我这代码是照抄视频的,正常应该不会报错才是,但我确实报错了,所以我才来问的。主要是实在不知道错在哪里,该怎么改。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-27 09:07:03 | 显示全部楼层
CC诗羽 发表于 2020-2-27 09:05
我知道,我这代码是照抄视频的,正常应该不会报错才是,但我确实报错了,所以我才来问的。主要是实在不知 ...

Python版本太低?
更新一哈试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-27 09:15:38 | 显示全部楼层
role = each_line.split (':',1)[0]
line_spoken = each_line.split (':',1)[1]
改成这样试试??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-2-27 09:22:01 | 显示全部楼层
根本原因是文件中找不到冒号用来分隔字符串。
1.文本文件中是中文冒号,程序是英文冒号
2.文本文件有空行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-27 09:26:35 | 显示全部楼层
冬雪雪冬 发表于 2020-2-27 09:22
根本原因是文件中找不到冒号用来分隔字符串。
1.文本文件中是中文冒号,程序是英文冒号
2.文本文件有空行

冒号这个问题,,,我一开始就把文本中的全改成英文冒号了。。程序运行过程中for循环第一次成了,然后第二轮循环中这一行报错的。。因为运行完程序后虽然报错了。。但是role有 '小客服'这个值。girl里面也有第一行的话。'小甲鱼,今天有客户问你有没有女朋友?'。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-27 09:27:13 | 显示全部楼层
ValueError: need more than 1 value to unpack
需要超过一个值去分析
可能是你打开的文件里面,以‘:’分割的话,分割不出来两部分内容
导致 (role,line_spoken) = each_line.split (':',1)等号左边无法赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-27 09:31:51 | 显示全部楼层    本楼为最佳答案   
CC诗羽 发表于 2020-2-27 09:26
冒号这个问题,,,我一开始就把文本中的全改成英文冒号了。。程序运行过程中for循环第一次成了,然后第 ...

在此行 (role,line_spoken) = each_line.split (':',1)
前面加上一句 print(each_line),看看报错前each_line的内容是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-2-27 09:35:39 | 显示全部楼层
EthanHsiung 发表于 2020-2-27 09:15
role = each_line.split (':',1)[0]
line_spoken = each_line.split (':',1)[1]
改成这样试试??

这么改之后是 line_spoken = each_line.split (':',1)[1]  这一句错误。
IndexError: list index out of range(索引错误:超出索引范围。)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-27 09:38:23 | 显示全部楼层
CC诗羽 发表于 2020-2-27 09:35
这么改之后是 line_spoken = each_line.split (':',1)[1]  这一句错误。
IndexError: list index out of ...

检查一下你的txt里面的内容,或者输出each_line看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-27 09:40:40 | 显示全部楼层
十月故里 发表于 2020-2-27 09:27
ValueError: need more than 1 value to unpack
需要超过一个值去分析
可能是你打开的文件里面,以‘:’ ...

可能是。
我改成了这个样子
for each_line in f:
    if each_line[:6] != '======':
        role = each_line.split (':',1)[0]
        
        if role == '小客服':
            boy.append('1')
        if role == '小甲鱼':
            girl.append('1')

然后六个文件出现了,里面也有对应数量的 '1'。
错误的应该就是  line_spoken = each_line.split (':',1)[1]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-27 09:45:19 | 显示全部楼层
冬雪雪冬 发表于 2020-2-27 09:31
在此行 (role,line_spoken) = each_line.split (':',1)
前面加上一句 print(each_line),看看报错前each ...

多谢。我大概知道怎么搞了。此时的each_line是 \n ...role 是 \n ...line_spoken 是'小甲鱼,今天有客户问你有没有女朋友?\n'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-29 04:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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