在 Python 3 中捕获特定的 OSError 异常

Ath*_*dom 4 python error-handling ubuntu python-3.x try-except

在Python 3中,我们如何捕获特定的OSError异常?

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

try:
    foo()
except OSError as e:
    print('Caught OSError: [Errno12]')
Run Code Online (Sandbox Code Playgroud)

完整的错误消息是:

捕获 OSError: [Errno12] 无法分配内存

我们怎样才能让Python只捕获 的Errno12变体OSError

fre*_*hen 9

为了清楚起见,并且由于某些错误号在平台之间可能有所不同(请参见例如比较),我建议使用该errno模块以便以跨平台方式捕获特定类型的 OSError:

try:
    # Code that might fail...
except OSError as e:
    if e.errno == errno.ENOMEM:
        # Handle ENOMEM case...
    else:
        raise
Run Code Online (Sandbox Code Playgroud)

您可以使用字典errno.errorcode来查找模块中特定错误代码的名称errno

>>> errno.errorcode[12]
'ENOMEM'
Run Code Online (Sandbox Code Playgroud)

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