zoukankan      html  css  js  c++  java
  • 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:UsersAndyDesktopsplit_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:UsersAndyDesktopsplit_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)

    再次读取,一切正常!

  • 相关阅读:
    Floyd最小环
    D
    C
    B
    HPU personal training
    D
    A
    简练网软考知识点整理-项目风险审计及风险评估
    简练网软考知识点整理-项目需求跟踪及需求跟踪矩阵
    简练网软考知识点整理-项目资源优化、资源平衡及资源平滑
  • 原文地址:https://www.cnblogs.com/Andy963/p/5322750.html
Copyright © 2011-2022 走看看