【发布时间】:2016-10-23 07:31:58
【问题描述】:
我经常在 python 中读到“请求原谅比请求许可更容易”,因此有时认为使用try except 而不是if 更好。
我经常有这样的陈述
if (not os.path.isdir(dir)):
os.mkdir(dir).
可能的替代品是
try:
os.mkdir(dir)
except OSError:
pass.
但是我想更具体一点,只忽略errno.EEXIST,因为这是唯一预期会发生的错误,我不知道会发生什么。
try:
os.mkdir(dir)
except OSError:
if(OSError.errno != errno.EEXIST):
raise
else:
pass.
似乎可以解决问题。但这真的很庞大,如果我需要大量这些代码块,会“污染”我的代码并降低可读性。在 Python 2.X 中有没有一种 Pythonic 方法可以做到这一点?处理此类案件的标准程序是什么?
编辑:
- @Francisco Couzo 指出,使用 raise 代替引发 OSerror
- 我使用 Python 2.7
【问题讨论】:
-
只做
raise,而不是raise OSError,这样你就不会丢失异常的上下文 -
你可以抓住
FileExistsError:except FileExistsError: pass -
不需要
else: pass,那是多余的。
标签: python error-handling errno