使用 try/except 或 if else 创建和验证目录? [复制]
Posted
技术标签:
【中文标题】使用 try/except 或 if else 创建和验证目录? [复制]【英文标题】:Creation and validation of directory using try/except or if else? [duplicate] 【发布时间】:2014-02-01 09:16:30 【问题描述】:这只是一个关于哪个更“pythonic”的问题
使用如果:
import os
somepath = 'c:\\somedir'
filepath = '%s\\thefile.txt' % somepath
if not os.path.exists(somepath) and not os.path.isfile(filepath):
os.makedirs(somepath)
open(filepath, 'a').close
else:
print "file and dir allready exists"
或使用try/Except:
import os
somepath = 'c:\\somedir'
filepath = '%s\\thefile.txt' % somepath
try:
os.makedirs(somepath)
except:
print "dir allready exists"
try:
with open(filepath):
// do something
except:
print "file doens't exist"
正如您在上面的示例中看到的,哪一个在 python 上更正确?另外,在哪些情况下我应该使用 try/except 代替 if/else ?我的意思是,我应该将所有 if/else 测试替换为 try/except 吗?
提前致谢。
【问题讨论】:
只是一个评论,这不是必须的,但是当使用 except 时尝试捕捉一个特定的......就像你的情况OSError
为 makedirs
。
你也可以看看这个post
【参考方案1】:
第二个更pythonic:“请求原谅比请求许可更容易。”
但在您的特定情况下使用异常还有另一个好处。如果您的应用程序运行多个进程或线程“请求权限”并不能保证一致性。例如以下代码在单线程中运行良好,但在多个线程中可能会崩溃:
if not os.path.exists(somepath):
# if here current thread is stopped and the same dir is created in other thread
# the next line will raise an exception
os.makedirs(somepath)
【讨论】:
以上是关于使用 try/except 或 if else 创建和验证目录? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
python中try。。。 except应该怎么用?与if。。。else有啥差别? print与return又有何差别?
python中try/except/else/finally的用法
python中try/except/else/finally的用法
Python:在 try/except/else 块中引发异常,处理顺序问题