捕获Python 3中的特定OSError异常
在Python3中,我们如何捕获特定的捕获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
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'