繁体   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