在python中使用try控制覆盖的更优雅的方法是什么?或者我能做得比C风格代码更好吗?
我有代码,可以创建一个文件夹并将输出文件放在其中。我想使用一个try-except-else块和一个overwrite选项,该选项可以设置为True或False,这样在文件夹已经存在并且overwrite设置为False的情况下,它将只打印文件夹已经存在,而在所有其他情况下,它将只执行而不添加注释 到目前为止,我提出的唯一解决方案如下:在python中使用try控制覆盖的更优雅的方法是什么?或者我能做得比C风格代码更好吗?,python,coding-style,try-catch,repeat,Python,Coding Style,Try Catch,Repeat,我有代码,可以创建一个文件夹并将输出文件放在其中。我想使用一个try-except-else块和一个overwrite选项,该选项可以设置为True或False,这样在文件夹已经存在并且overwrite设置为False的情况下,它将只打印文件夹已经存在,而在所有其他情况下,它将只执行而不添加注释 到目前为止,我提出的唯一解决方案如下: def function( parameters, overwrite = False ): try: os.makedirs( dir
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。你已经很接近了。改编: 我不明白你为什么要在try区再找一个 您可以使用makedirs来测试目录是否存在,这是有原因的。在这种情况下:
try:
os.makedirs( dir )
except OSError:
if not overwrite:
print dir + ' already exists, skipping...'
return
pass # data making code...
您可能还想检查路径是否存在,但它是一个文件而不是一个目录。基于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...
问题是,与创建目录不同,如果1 overwrite=True或2目录最初不存在,我需要执行一段代码。在没有else块的情况下,我如何处理这两种情况?@tel:只需将其放在try/except代码之后。然后在打印后放入一个return语句,说明它已经存在。这样,如果os.makedirs成功,或者覆盖为真,它将最终写入您的输出。那么os.path.existspath如何,而不是检查错误号?+1(Daniel DiPaolo和Thomas K)。另外一个问题也让我感到困惑,如果您只是简单地将数据生成放在try块之后,它就会满足您的要求。@Thomas K:好的,我现在知道了。我知道我错过了什么。如果你在答复中这样说,我会接受的。
try:
os.makedirs( dir )
except OSError:
if not overwrite:
print dir + ' already exists, skipping...'
return
pass # data making code...
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...