python3 split( ) not enough values to unpack(expceted 2, got 1)

Posted 安迪_963

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3 split( ) not enough values to unpack(expceted 2, got 1)相关的知识,希望对你有一定的参考价值。

在运行一个小脚本时,脚本从一文本文件读取数据,事实上这个文件只有一行‘count:2‘,并取到这个2,将其转成数字。但运行,总是报错。

代码如下:

技术分享
1 with open(count.txt, r) as file:
2     if not file.readline():
3         pass
4     else:
5         name, count = file.readline().split(:)
6         count = int(count)
code

错误信息如下:

‘‘‘
Traceback (most recent call last):
File "C:\Users\Andy\Desktop\split_error.py", line 6, in <module>
count = int(count)
#ValueError: invalid literal for int() with base 10: ‘‘

‘‘‘

由此可以看出count为空。但是明显有内容,怎么会是空呢?于是注释到count = int(count)这行,再次运行,又出错了

错误信息如下:

‘‘‘

Traceback (most recent call last):
File "C:\Users\Andy\Desktop\split_error.py", line 5, in <module>
name, count = file.readline().split(‘:‘)
ValueError: not enough values to unpack (expected 2, got 1)

‘‘‘

说是没有给足够的值来解包,应该有两个,只给了一个。这就奇怪了,还是不明白原因。

于是shell里面试了下,终于找到原因:

当打开文件时,比如对一个文件执行了:readlines() 或者 readline() 那么文件的当前位置偏移就会改变,readlines()是偏移到文件结尾,而readlin()偏移到下一行.

(本脚本是因为执行if时,已经执行了readlines(),不成立,又执行else中的readlin())

所以,当这里第二次调用readlines()或者readlin()时,

已经到了文件结尾,读取到的内容为空,所以对空内容取split(‘:‘)方法时,当然报错。

因此,这里的最好的解决方法就是在第一次读之前将文件偏移回文件头

方法如下:file.seek(0)

再次读取,一切正常!

 

以上是关于python3 split( ) not enough values to unpack(expceted 2, got 1)的主要内容,如果未能解决你的问题,请参考以下文章

Python3 关于split()的补充

python3----split and join

如何解决 TypeError: path.split is not a function

Python3正则匹配re.split,re.finditer及re.findall函数用法详解

Python3-join()和split()

Python3基础 str split 用指定的字符将字符串分割