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)

再次讀取,一切正常!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM