我没有使用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()
答案 0 :(得分:2)
第1部分:open
和with open
之间的差异
基本上,使用with
只会确保您不会忘记close()
文件,从而使其更安全/防止内存问题。
第2部分:FileExistsError
这是操作系统错误,因此可能是特定于操作系统的。您的语法是正确的,假设您要覆盖(截断)前一个文件。
这可能是问题是特定于操作系统的原因,而且大多数其他用户无法复制问题。
但是,如果它导致问题,您可以尝试使用w+
模式,它可能会解决问题。
编辑:我刚刚注意到关于teams
的评论流最初是路径。很高兴它得到了修复!
答案 1 :(得分:2)
此错误是由以前版本的已发布脚本引起的。它看起来像这样:
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
语句也会在写入期间发生异常时关闭文件。