簡體   English   中英

python中的'with'函數有什么作用?

[英]what does the 'with' function in python do?

我有一個python腳本,讀取.csv文件,適用於Python 2.7,但在Python 2.4上打破。 拋出的錯誤就行了

with open(sys.argv[1], 'rb') as csvfile:

就在這里,它給了我一個語法錯誤,所以我的問題是'與'做什么(或者這可能會導致2.4中的語法錯誤)。 我無法在任何地方找到關於此功能的文檔,部分原因是它的通用名稱。

您正在查看上下文管理器; 相關文檔,這是一個更容易搜索的術語。

  • 添加該功能的原始提議PEP-343詳細描述了上下文管理器。

  • datamodel文檔描述了上下文管理器的用途 上下文管理器有.__enter__().__exit__()方法。

  • with語句本身在參考文檔中記錄為復合語句

  • 對於文件對象, File對象文檔(標准類型文檔的一部分)描述了大多數文件對象可以用作上下文管理器。

具體來說,對於文件,您要查找的相關部分是使用file.close()方法記錄的 ,因為這是上下文管理器.__exit__()方法對文件的作用:關閉文件,無論發生什么。

將其轉換為不支持with語句的舊Python版本,這意味着您必須手動關閉文件,使用try: finally:組合:

csvfile = open(sys.argv[1], 'rb')
try:

    # do things with csvfile

finally:
    csvfile.close()

這可確保csvfile在其他任何情況下正確關閉。

在打開文件的具體情況下,它實現了以下功能:

cvsfile = open(sys.argv[1], 'rb')
try:
   ...
finally:
    cvsfile.close()

的Python 2.5和更高版本允許使用表達式中的對象with上下文管理器 )來定義它們是如何進入的背景下,離開它。 離開時,文件將被關閉with ,鎖將被解鎖,等等。

PEP 343介紹了with仍然是一個相當有價值的信息讀取。

暫無
暫無

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

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