【问题标题】:Python 2.6 File exists errno 17,Python 2.6 文件存在 errno 17,
【发布时间】:2015-03-14 18:12:22
【问题描述】:
如果文件已经存在,我该如何摆脱错误 17 并发出警告消息?
import os, sys
# Path to be created
path = "/tmp/home/monthly/daily"
try:
os.makedirs(path)
except OSError as e:
if e.errno == 17:
//do something
os.makedirs( path, 0755 );
print "Path is created"
但它仍然显示 ERRNO 17 消息。我能做什么?
【问题讨论】:
标签:
python
python-2.7
exception
error-handling
path
【解决方案1】:
在第一次调用os.makedirs 后,将创建目录。 (如果目录已经存在,则不更改)
第二次调用总是会引发异常。
删除对makedirs的第二次调用:
try:
os.makedirs(path, 0755)
except OSError as e:
if e.errno == 17: # errno.EEXIST
os.chmod(path, 0755)
# os.makedirs( path, 0755 ) <----
【解决方案2】:
我认为做你想做的事。当发生OSError 错误时,它会检查错误代码并在您有兴趣处理的情况下打印一条警告消息,否则它只会传播异常。注意 os.makedirs() 的可选 mode 参数会覆盖默认的 0777。
import errno, os, sys
# Path to be created
path = "/tmp/home/monthly/daily"
try:
os.makedirs(path, 0755)
except OSError as e:
if e.error == errno.EEXIST: # file exists error?
print 'warning: {} exists'.format(path)
else:
raise # re-raise the exception
# make sure its mode is right
os.chmod(path, 0755)
print "Path existed or was created"
【解决方案3】:
你可以创建一个变量来查看你是否创建了文件
像这样成功:
import os, sys
# Path to be created
path = "/tmp/home/monthly/daily"
created = False
is_error_17 = False
try:
os.makedirs(path)
created = True
except OSError as e:
if e.errno == 17:
print 'File has benn created before'
is_error_17 = True
pass
if created == True:
print 'created file successfully'
else:
print 'created file failed.'
if is_error_17 == True:
print 'you got error 17'
如果第一次尝试捕获错误,则在您的代码中,第二个 os.makedirs(path, 0755);仍然会再次引发错误。