Python錯誤:Ran out of input解決辦法


某天在用shelve的時候出錯了,錯誤顯示:
EOFError: Ran out of input
這個......
看上去從錯誤信息里看不出什么,
但是把文件刪掉,居然又好了!
又查了下日志:在出這個錯之前,數據庫讀寫程序出了錯,導致數據庫文件被flush,大小變為0B。
似乎問題就出在這。
其實經過深究,這個問題有如下幾種可能原因:

  1. 讀完了啊喂!
    示例源碼:
with open("test.txt","rb") as f:
    print(f.read())
    print(f.read()) #EOFError!

原因:當文件是一個以bytes模式打開的時候,文件指針讀到最后時並不會像讀普通文本一樣返回空,而是拋出這個錯誤。
解決:添加f.seek(0)
改進后示例源碼:

with open("test.txt","rb") as f:
    print(f.read())
    f.seek(0) #Move the point!
    print(f.read()) #Now there are no errors!

  1. 模式有問題啊喂!
    示例源碼:
with open("test.txt","rb") as f:
    f.write(b"HELLO!") #EOFError on sometimes!

原因:同樣是bytes模式不完善,導致有時以rb模式打開並強制進行不符合模式的操作時會拋出此錯誤。
解決:把模式改成合適的東東。實例中可以改為rb+wb+注意它們的區別
改進后示例源碼:

with open("test.txt","rb+") as f:
    f.write(b"HELLO!") #Now there are no errors!

完!

  • 開發日記 No.1 & 本人第一篇博客


免責聲明!

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



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