在python中用tryexceptelse控制覆盖的更优雅的方法?或者我能比Cstyle代码做得更好吗?

2024-03-29 08:42:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些代码可以创建一个文件夹并在其中放置输出文件。我想使用try except else块和overwrite选项(可以设置为True或False),以便在文件夹已经存在且overwrite设置为False的情况下,它只打印文件夹已经存在,而在其他所有情况下,它将不加注释地执行。在

到目前为止,我提出的唯一解决方案如下:

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。在


Tags: 文件代码文件夹falsedataif选项dir
3条回答

(根据丹尼尔·迪波洛的回答)

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...

你已经很接近了。适应from this answer

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。在

if not os.path.isdir(path):
    os.makedirs(path)
elif not overwrite:
    return # something ?
pass # data making code....

您可以使用makedirs来测试目录是否存在。在这种情况下:

^{pr2}$

您可能还需要检查路径是否存在,但它是一个文件而不是一个目录。在

相关问题 更多 >