捕获Python 3中的特定OSError异常

捕获Python 3中的特定OSError异常,python,python-3.x,ubuntu,error-handling,try-except,Python,Python 3.x,Ubuntu,Error Handling,Try Except,在Python3中,我们如何捕获特定的OSError异常 我的当前代码捕获所有OSError,但只需要捕获OSError:[Errno 12] try: foo() except OSError as e: print('Caught OSError: [Errno12]') 完整的错误消息是: 捕获的操作错误:[Errno12]无法分配内存 如何让Python只捕获OSError的Errno12变体?您可以使用的errno属性。对于错误: >>> raise

在Python3中,我们如何捕获特定的
OSError
异常

我的当前代码捕获所有
OSError
,但只需要捕获
OSError:[Errno 12]

try:
    foo()
except OSError as e:
    print('Caught OSError: [Errno12]')
完整的错误消息是:

捕获的操作错误:[Errno12]无法分配内存


如何让Python只捕获
OSError
Errno12
变体?

您可以使用的
errno
属性。对于错误:

>>> raise OSError(12, 'Some Error')
Traceback (most recent call last):

  File "<ipython-input-5-8a046f16ebb6>", line 1, in <module>
    raise OSError(12, 'Some Error')

OSError: [Errno 12] Some Error

不同平台之间的一些错误编号可能不同(例如,请参见比较)。因此,我建议使用该模块以跨平台方式捕获特定类型的操作错误:

try:
    # Code that might fail...
except OSError as e:
    if e.errno == errno.ENOMEM:
        # Handle ENOMEM case...
    else:
        raise
您可以使用字典
errno.errocode
errno
模块中查找特定错误代码的名称:

>>> errno.errorcode[12]
'ENOMEM'

请注意,错误编号12在大多数平台上似乎是相同的,但其他许多平台则不同。

回答得很好,但如果不是错误编号12,他们可能希望“提高”而不是“继续”,因此实际上只捕获错误编号12。@TamirIlan编辑。当然,OP可以决定在条件不满足时要做什么。
>>> errno.errorcode[12]
'ENOMEM'