首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python,'open‘和'with open’的区别

Python,'open‘和'with open’的区别
EN

Stack Overflow用户
提问于 2015-12-23 13:58:42
回答 2查看 13.6K关注 0票数 3

我没有使用过with语句,但对它的用途比较熟悉。使用下面的代码,#1块按预期工作,但是#2 --这里纠正一下,它应该与第一个块做同样的事情--抛出以下异常FileExistsError: [Errno 17] File exists: 'mydir'

代码语言:javascript
复制
import os

if not(os.path.exists('mydir')):
    os.makedirs('mydir')

path = 'mydir'
filename = 'msg.txt'
filename2 = 'msg2.txt'

#1
with open(os.path.join(path, filename), 'w') as temp_file:
    temp_file.write("hello")

#2
temp_file = open(os.path.join(path, filename2), 'w')
temp_file.write("hello again")
temp_file.close()   
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-23 14:29:19

此错误是由发布的脚本的早期版本引起的。它看起来是这样的:

代码语言:javascript
复制
if not(os.path.exists('teams')):
    os.makedirs('mydir')

这将测试目录teams是否存在,但会尝试创建一个新目录mydir

建议的解决方案:对所有内容都使用变量名,不要硬连接路径字符串:

代码语言:javascript
复制
path = 'mydir'

if not(os.path.exists(path)):
    os.makedirs(path)

是的,#1#2在本质上是一样的。但是,如果在写入过程中出现异常,with语句也会关闭文件。

票数 2
EN

Stack Overflow用户

发布于 2015-12-23 14:06:52

第1部分: with open和之间的区别

基本上,使用with只是确保您不会忘记close()文件,使其更安全/防止内存问题。

第2部分:FileExistsError

这是操作系统错误,因此可能是特定于操作系统的。但是,假设您想要覆盖(截断)前一个文件,那么您的语法是正确的。

这可能是为什么问题是特定于操作系统的,而大多数其他用户无法复制该问题。

但是,如果它导致了问题,你可以尝试使用w+模式,它可能会解决问题。

A similar issue was documented here.

编辑:我刚刚注意到关于teams最初是路径的评论流。很高兴它被修好了!

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34429519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档