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

问题描述 投票:0回答:3

在 Python 3 中,我们如何捕获特定的

OSError
异常?

我当前的代码捕获了所有

OSError
,但只需要捕获
OSError: [Errno 12]

try:
    foo()
except OSError as e:
    print('Caught OSError: [Errno12]')

完整的错误消息是:

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

如何让 Python 只捕获

Errno12
OSError
变体?

python python-3.x ubuntu error-handling try-except
3个回答
9
投票

为了清楚起见,并且由于某些错误号在不同平台之间可能有所不同(例如,参见 this 比较),我建议使用

errno
模块以便以跨平台方式捕获特定类型的 OSError:

try:
    # Code that might fail...
except OSError as e:
    if e.errno == errno.ENOMEM:
        # Handle ENOMEM case...
    else:
        raise

您可以使用字典

errno.errorcode
errno
模块中查找特定错误代码的名称:

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

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


4
投票

您可以使用

errno
OSError
属性。对于错误:

>>> 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:
    raise OSError(12, 'Some Error')
except OSError as e:
    if e.errno == 12:
        print('OSError no. 12 caught')
    else:
        raise

# Output:
# OSError: [Errno 12] Some Error

0
投票

当我重新启动我的计算机时,此错误已解决。然后主动修复。

© www.soinside.com 2019 - 2024. All rights reserved.