我有一个python脚本,它读取一个.csv文件,该文件适用于Python 2.7但在Python 2.4上有用。抛出的错误在行
with open(sys.argv[1], 'rb') as csvfile:
就在这里,它给了我一个语法错误,所以我的问题是'与'做什么(或者这可能会导致2.4中的语法错误)。我无法在任何地方找到关于此功能的文档,部分原因在于它的通用名称。
答案 0 :(得分:3)
您正在查看上下文管理器;相关文档,这是一个更容易搜索的术语。
添加该功能的原始proposal PEP-343详细介绍了上下文管理器。
datamodel documentation描述了上下文管理器的用途。上下文管理员使用.__enter__()
和.__exit__()
方法。
with
语句本身在参考文档中记录为compound statement。
对于文件对象,File object文档(标准类型文档的一部分)描述了大多数文件对象都可以用作上下文管理器。
具体来说,对于文件,您要查找的相关部分记录在file.close()
method中,因为这是上下文管理器.__exit__()
方法对文件的作用:关闭文件,无论发生了什么。
将其转换为尚未支持with
语句的旧版Python,这意味着您必须使用try:
finally:
组合手动关闭文件:
csvfile = open(sys.argv[1], 'rb')
try:
# do things with csvfile
finally:
csvfile.close()
这确保csvfile
在发生任何其他事件时正确关闭。
答案 1 :(得分:1)
在打开文件的具体情况下,它实现了以下目的:
cvsfile = open(sys.argv[1], 'rb')
try:
...
finally:
cvsfile.close()
Python 2.5及更高版本允许在with
(上下文管理器)中用作表达式的对象来定义它们如何进入上下文并保留它。离开with
时文件将被关闭,锁将被解锁,依此类推。
with
的PEP 343仍然是一个信息丰富的读物。