如何解决在Python 3中捕获特定的OSError异常
在Python 3中,我们如何捕获特定的OSError
异常?
我当前的代码捕获了所有OSError
,但是只捕获了OSError: [Errno 12]
。
try:
foo()
except OSError as e:
print('Caught OSError: [Errno12]')
完整的错误消息是:
捕获到OSError:[Errno12]无法分配内存
我们如何让Python仅捕获Errno12
的{{1}}变体?
解决方法
您可以使用OSError
的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:
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
,
某些错误号在平台之间可能有所不同(例如,参见this比较)。因此,我建议使用errno
模块,以便以跨平台方式捕获特定类型的OSError:
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似乎都是相同的,但其他许多平台也有所不同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。