在 Python 3 中,我们如何捕获特定的
OSError
异常?
我当前的代码捕获了所有
OSError
,但只需要捕获 OSError: [Errno 12]
。
try:
foo()
except OSError as e:
print('Caught OSError: [Errno12]')
完整的错误消息是:
捕获 OSError:[Errno12] 无法分配内存
如何让 Python 只捕获
Errno12
的 OSError
变体?
为了清楚起见,并且由于某些错误号在不同平台之间可能有所不同(例如,参见 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 在大多数平台上似乎都是相同的,但许多其他平台有所不同。
您可以使用
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
当我重新启动我的计算机时,此错误已解决。然后主动修复。