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)

再次读取,一切正常!

 

posted on 2016-03-26 13:35 Andy_963 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/Andy963/p/5322750.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值