簡體   English   中英

關於 with 語句 python 的混淆

[英]Confusion about with statement python

我有一個關於在 python 中使用with語句的問題,如下所示:

with open(fname) as f:
    np.save(f,MyData)      

如果我沒記錯的話,這會以安全的方式打開文件fname ,這樣如果發生異常,文件就會正確關閉。 然后它將MyData寫入文件。 但我要做的很簡單:

np.save(fname,MyData)

這將導致相同的結果, MyData被寫入fname 我不確定我是否正確理解為什么前者更好。 我不明白這個單行如何在運行該行后保持文件“打開”。 因此,當我的代碼隨后崩潰時,我也沒有看到這會如何產生問題。

也許這是一個愚蠢/基本的問題,但我一直認為更干凈的代碼是更好的代碼,所以沒有額外的with -loop 對我來說似乎更好。

numpy.save() 在它的代碼中處理打開和關閉,但是如果你提供一個文件描述符,它會保持打開狀態,因為它假設你想對文件做其他事情,如果它關閉文件它會中斷為您提供的功能。

試試這個:

f = open(<file>)
f.close()
f.read()  # boom

另請參閱hasattr(file, "write")描述符中的“文件”或文件、緩沖區或其他 IO 中的“句柄”)檢查,該檢查檢查它是否是具有write()方法的對象並通過該 Numpy 判斷只假設它是真的。

然而 NumPy 不保證濫用其 API,例如,如果您創建一個自定義結構作為緩沖區並且包含write() ,它將被視為路徑並因此在open()調用中崩潰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM