erg/crates/erg_compiler/lib/std/exception.er
2024-09-20 18:26:29 +09:00

22 lines
531 B
Python

unsound = import "unsound"
unsound.pyexec("""
def try_(p, exc=lambda _: None, els=lambda: None, fin=lambda: None):
__result = None
try:
__result = p()
except Exception as e:
__result = exc(e)
else:
els()
finally:
fin()
return __result
""")
.try! = unsound.pyeval("try_")
assert .try! in |T, U|(
p!: () => T,
exc!: (exception: BaseException) => U := (exception: BaseException) => NoneType,
else! := () => NoneType,
finally! := () => NoneType,
) => T or U