Я хотел бы знать, как обрабатывать различные исключения, имеющие один и тот же «тип». Я пытаюсь использовать код, чтобы сделать каталог:Обработка исключений с разными кодами ошибок
os.mkdir(target_dir_name)
И я знаю, что это может потерпеть неудачу по различным причинам, например, если каталог уже существует:
OSError: [Errno 17] File exists:
или если есть не имеет прав для создания новой реж:
OSError: [Errno 13] Permission denied:
Я хотел бы, чтобы адаптировать свои сообщения об ошибках конкретной причины отказа, так что я придумал следующий код:
try:
os.mkdir(target_dir_name)
except OSError as e:
if e.errno == 17:
print "Warning: Directory %s already exists, executing a rebuild" % (target_dir_name)
elif e.errno == 13:
sys.exit("Error: Directory "+target_dir_name+" cannot be created incorrect permissions")
, но я хотел бы сделать что-то немного менее жестко. Есть ли способ Pythonic, который я мог бы обновить мои проверки на отказ?
В Python 3.3, там ошибки разделилось на отдельные типы: http://docs.python.org/3/whatsnew/3.3.html#pep-3151- reworking-the-os-and-io-exception-hierarchy – delnan
Я еще не нашел элегантного решения, так как многие из этих исключений и типов ошибок настолько специфичны с их атрибутами. Поэтому обычно в этом случае я обычно делаю то, что предлагает http://stackoverflow.com/a/16268642/158111, - оберните определенную обработку ошибок в функцию и избегайте повторного жесткого кодирования. – woozyking
@ delnan - Спасибо за ввод. Это будет распределенный скрипт, когда я покончу с этим, и я стараюсь не привязываться к одной версии Python, если я могу помочь. Я не могу гарантировать, что все будут работать, но я решил, что 2.7.3 будет довольно безопасным (поскольку это соответствует стандарту в последней стабильной версии Ubuntu). – Mike