在Python中使用try-except-else控制覆盖的更优雅方法?还是能比C风格代码更好吗?
我有一段代码,它可以创建一个文件夹并把输出文件放进去。我想使用一个包含try-except-else的结构,并且希望有一个覆盖选项,这个选项可以设置为真或假。这样的话,如果文件夹已经存在而覆盖选项设置为假,它就会打印出“文件夹已经存在”,在其他情况下,它就会正常执行,不会有任何提示。
到目前为止,我想到的唯一解决方案是这样的:
def function( parameters, overwrite = False ):
try:
os.makedirs( dir )
except OSError:
if overwrite:
data making code...
else:
print dir + ' already exists, skipping...'
else:
if overwrite:
data making code...
有没有可能有更好的,或者说更优雅的解决方案呢?比如说,能让我不必重复写处理数据的代码?这样写让我想起了我在C语言中不得不写的一些东西,感觉不太像Python的风格。
3 个回答
0
if not os.path.isdir(path):
os.makedirs(path)
elif not overwrite:
return # something ?
pass # data making code....
有一些原因让你可能想用 makedirs
来检查文件夹是否存在。在这种情况下:
try:
os.makedirs( dir )
except OSError:
if not overwrite:
print dir + ' already exists, skipping...'
return
pass # data making code...
你可能还想检查一下这个路径是否存在,但它是一个文件而不是文件夹。
5
你已经很接近了。可以参考这个回答来进行调整:
import os, errno
def mkdir(path, overwrite=False):
try:
os.makedirs(path)
except OSError as exc: # Python >2.5
if exc.errno == errno.EEXIST:
if not overwrite:
print "path '%s' already exists" % path # overwrite == False and we've hit a directory that exists
else: raise
我不明白为什么在try
块里需要一个else
。
3
(基于Daniel DiPaolo的回答)
import os, errno
def mkdir(path, overwrite=False):
try:
os.makedirs(path)
except OSError as exc: # Python >2.5
if exc.errno == errno.EEXIST:
if not overwrite:
print "path '%s' already exists" % path # overwrite == False and we've hit a directory that exists
return
else: raise
# data making code...