Я часто читал, что в питоне «легче попросить прощения, чем разрешения», поэтому иногда считается, что лучше использовать 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? Какова стандартная процедура для таких случаев?
правки:
- используйте повышение вместо повышения OSerror, как указал @Francisco Cuzo
- Я использую Python 2.7
raise
, а неraise OSError
, чтобы не потерять контекст исключения - person Francisco C   schedule 23.10.2016FileExistsError
:except FileExistsError: pass
- person vaultah   schedule 23.10.2016else: pass
, это лишнее. - person Mark Ransom   schedule 25.10.2016