我没有使用过with语句,但对它的用途比较熟悉。使用下面的代码,#1块按预期工作,但是#2 --这里纠正一下,它应该与第一个块做同样的事情--抛出以下异常FileExistsError: [Errno 17] File exists: 'mydir'。
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() 发布于 2015-12-23 14:29:19
此错误是由发布的脚本的早期版本引起的。它看起来是这样的:
if not(os.path.exists('teams')):
os.makedirs('mydir')这将测试目录teams是否存在,但会尝试创建一个新目录mydir。
建议的解决方案:对所有内容都使用变量名,不要硬连接路径字符串:
path = 'mydir'
if not(os.path.exists(path)):
os.makedirs(path)是的,#1和#2在本质上是一样的。但是,如果在写入过程中出现异常,with语句也会关闭文件。
发布于 2015-12-23 14:06:52
第1部分: with open和之间的区别
基本上,使用with只是确保您不会忘记close()文件,使其更安全/防止内存问题。
第2部分:FileExistsError
这是操作系统错误,因此可能是特定于操作系统的。但是,假设您想要覆盖(截断)前一个文件,那么您的语法是正确的。
这可能是为什么问题是特定于操作系统的,而大多数其他用户无法复制该问题。
但是,如果它导致了问题,你可以尝试使用w+模式,它可能会解决问题。
A similar issue was documented here.
编辑:我刚刚注意到关于teams最初是路径的评论流。很高兴它被修好了!
https://stackoverflow.com/questions/34429519
复制相似问题