在運行一個小腳本時,腳本從一文本文件讀取數據,事實上這個文件只有一行'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)
錯誤信息如下:
'''
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)
再次讀取,一切正常!