【发布时间】:2017-06-08 13:54:12
【问题描述】:
在 Python 脚本中,我遇到了一个在 with 语句中定义的变量,但该变量在语句之外使用,例如以下示例中的 file:
with open(fname, 'r') as file:
pass
print(file.mode)
直觉上我会说file 不应该存在于with 语句之外,而且这只是偶然的。我在 Python 文档中找不到关于这是否应该工作的结论性声明。这种类型的语句是否可以安全使用(也适用于未来的 python 版本),还是应该避免?在 Python 文档中指向此信息的指针也会非常有帮助。
【问题讨论】:
-
您发布的代码不应该工作。离开上下文管理器(with 块)将关闭文件。 我的立场是正确的。请参阅下面的 cmets。
-
@WillDaSilva 你试过了吗?它适用于 Python 2.7
-
它确实有效,因为
file.mode不访问文件本身,只访问 Python 对象。 -
with块不会创建新范围。所有引用都在本地范围内创建。循环等也是如此,这就是为什么在for i in range(5):之后,i仍然可用。with块将close文件句柄。 -
是的,文件将被关闭。但表示已关闭文件的对象仍然可用,因为
print()调用与with语句在同一范围内。
标签: python with-statement