Python新手在這裏。我正在編寫一個腳本,可以將某些輸出轉儲到文件或stdout,具體取決於傳遞給它的參數。在解釋參數時,我將open
'ed文件或stdout
分配給名爲output_file
的全局變量,腳本的其餘部分可以使用該全局變量寫入輸出,而不管選擇了何種類型的流。在腳本的最後我close
output_file
。這對於文件流來說是適當的,雖然對於標準輸出而言它是多餘的,但我對其他編程語言的經驗表明,在程序結束之前立即顯式關閉標準輸出並不會損害。爲什麼顯式關閉stdout時會出現ValueError?
但是,無論何時將stdout用於輸出(並隨後關閉),我都會在「關閉的文件」上收到「ValueError:'I/O操作。我知道這個錯誤不是由我的調用關閉stdout而直接產生的,而是在腳本返回後發生。我的問題是:爲什麼會發生這種情況,並且有沒有辦法手動關閉stdout而不觸發它? (我知道,我可以很容易地通過有條件地關閉流,只有當選擇了一個文件來解決這個問題,但我想知道是否/爲什麼這是必要的。)
很簡單示範段:
from sys import stdout
stdout.close()
請關閉stdout()後,在output_file的任何操作上檢查您的代碼,或者在此處放置更多代碼,因爲只有在代碼段後面使用了output_file.write(..)時,給定代碼段纔會生成ValueError。 – Vladimir 2012-02-05 08:48:23
給定片段自身產生錯誤。 – nonoitall 2012-02-05 09:16:16