Python 不同错误代码的异常处理

Python 不同错误代码的异常处理,python,exception-handling,mkdir,Python,Exception Handling,Mkdir,我想知道如何处理具有相同“类型”的不同异常。我正在尝试使用一些代码创建目录: os.mkdir(target_dir_name) 我知道这可能会由于各种原因而失败,例如,如果目录已经存在: OSError: [Errno 17] File exists: 或者如果没有创建新目录的权限: OSError: [Errno 13] Permission denied: 我想根据具体的故障原因定制错误消息,因此我提出了以下代码: try: os.mkdir(target_dir_name)

我想知道如何处理具有相同“类型”的不同异常。我正在尝试使用一些代码创建目录:

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方法可以更新我的子故障检查?

我找到的唯一信息。。。我想这是我最好的答案:

使用,我至少可以将当前代码重写为:

import errno
#...
except OSError as e:
  if e.errno == errno.EEXIST:
    print "Warning: Directory %s already exists, e..."
  elif e.errno == errno.EACCESS:
    sys.exit("Error: Directory "+target_dir_name+"..."
如果我升级到,有更好的:

except FileExistsError:
  print ("Warning: Directory %s already exists, e...")
except PermissionError:
  sys.exit("Error: Directory "+target_dir_name+"...")
似乎我可以通过使用
sys.version\u info.major
minor
来做一些有趣的事情,以确保它至少是
3.2


希望会有更好的解决方案……

在Python3.3中,错误被分为不同的类型:我还没有找到一个优雅的解决方案,因为很多异常和错误类型的属性都非常具体。所以一般来说,在这种情况下,我通常按照建议去做——将特定的错误处理封装到一个函数中,避免重复的硬编码。@delnan——谢谢您的输入。这将是一个分布式脚本,当我完成它的时候,如果我能帮助的话,我会尽量不把自己束缚在一个Python版本上。我不能保证每个人都会运行什么,但我认为2.7.3是相当安全的(因为这是最新稳定的Ubuntu版本的标准版本),2.7.3几乎是你能锁定的版本。2.7行是Python2的最终版本。Python2.7.4和2.7.5是错误修复版本,Python3破坏了向后兼容性。