在python中使用try-except-else控制覆盖的更优雅的方法是什么?或者我可以比C风格的代码做得更好吗?

tel*_*tel 0 python coding-style try-catch repeat

我有一个代码,用于创建文件夹并在其中放置输出文件.我想使用try-except-else块和覆盖选项,可以设置为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...
Run Code Online (Sandbox Code Playgroud)

这个问题可能有更好或更优雅的解决方案吗?比如,例如,我不需要复制我的数据制作代码?这样做会让我想起太多的风格,我最终不得不用C语写一些东西,而且看起来并不像Pythonic.

Dan*_*olo 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
Run Code Online (Sandbox Code Playgroud)

我不明白你为什么会需要一个else在上try块.

  • @tel:简单地把它放在try/except代码之后.然后在打印之后放一个`return`语句,它已经存在.这样,如果`os.makedirs`成功,或者overwrite为True,它将最终写出你的输出. (3认同)