nếu bạn thực sự cần quản lý các ngoại lệ:
(sửa đổi từ câu trả lời của poke53280)
>>> def try_or(fn, exceptions: dict = {}):
try:
return fn()
except Exception as ei:
for e in ei.__class__.__mro__[:-1]:
if e in exceptions: return exceptions[e]()
else:
raise
>>> def context():
return 1 + None
>>> try_or( context, {TypeError: lambda: print('TypeError exception')} )
TypeError exception
>>>
lưu ý rằng nếu ngoại lệ không được hỗ trợ, nó sẽ tăng lên như mong đợi:
>>> try_or( context, {ValueError: lambda: print('ValueError exception')} )
Traceback (most recent call last):
File "<pyshell#57>", line 1, in <module>
try_or( context, {ValueError: lambda: print('ValueError exception')} )
File "<pyshell#38>", line 3, in try_or
return fn()
File "<pyshell#56>", line 2, in context
return 1 + None
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
>>>
ngoài ra nếu Exception
được đưa ra, nó sẽ khớp với bất kỳ thứ gì bên dưới.
( BaseException
cao hơn, vì vậy nó sẽ không khớp)
>>> try_or( context, {Exception: lambda: print('exception')} )
exception