2016-10-12 125 views
1

我的代碼:蟒蛇:ValueError異常:在關閉的文件I/O操作

with open('pass.txt') as f: 
     credentials = dict([x.strip().split(':') for x in f.readlines()]) # Created a dictionary with username:password items 

     name_input = input('Please Enter username: ') 

     if name_input in credentials: # Check if username is in the credentials dictionary 

      name_input = input('Please Enter new username: ') 



     f.write(name_input) 
     f.write(":") 
     pass_input = input('Please Enter password: ') 
     f.write(pass_input) 
     f.write("\n") 
     f.close() 

     print('Registered') 

我收到此錯誤:

Traceback (most recent call last): 
    File "silwon.py", line 146, in <module> 
    f.write(name_input) 
ValueError: I/O operation on closed file. 

還怎麼用戶進入後同樣使用sys.exit用戶名3次?

+2

請修復您的縮進。我懷疑你正試圖在''with''塊之外''寫''到'f',這*保證*文件將被關閉。 –

+1

由於損壞的縮進很難說明,但看​​起來至少,您正在嘗試將「.write」寫入爲_reading_打開的文件句柄。我不知道_that_是否會產生你所看到的錯誤,儘管... – mgilson

+2

我有一種感覺,在你的真實代碼中,你的'f.write'實際上是在''with'之外。不僅如此,但是一旦你修改了縮進,你就試圖寫入你的文件,但是你處於讀取模式。你也必須打開你的文件以便寫作。 – idjaw

回答

3

Python中的每個文件操作都是在以某種模式打開的文件上完成的。該模式必須被指定爲open函數的參數,並且它決定了可以在文件上執行的操作以及文件指針的初始位置。

在您的代碼中,除打開函數的名稱之外,您已打開文件而沒有任何參數。未指定模式時,文件以默認模式打開 - 只讀,或'r'。這將文件指針放置在文件的開頭,使您能夠順序掃描文件的內容,並將它們讀入程序中的變量中。爲了能夠將數據寫入文件,您必須指定打開文件的模式,以便將數據寫入文件。可以從兩個選項'w''w+''a''a+'中選擇合適的模式。

'w'打開文件,並授予用戶只能將數據寫入文件而不讀取文件的權限。它還將指針放在文件的開頭,並覆蓋所有現有數據。 'w+'幾乎是一樣的,唯一的區別是你也可以從文件中讀取。

'a'打開寫入文件,並將文件指針放在文件末尾,這樣就不會覆蓋文件的內容。 'a+'擴展了'a'的功能以允許從文件讀取。

使用合適的模式打開文件以滿足您的要求,並通過將打開的命令修改爲open('pass.txt', <mode>)來執行它。

+0

謝謝@SaujasVaduguru – Von

相關問題