diff options
-rw-r--r-- | py/vm.c | 3 | ||||
-rw-r--r-- | tests/basics/try-reraise.py | 9 |
2 files changed, 11 insertions, 1 deletions
@@ -697,6 +697,9 @@ unwind_return: unum = *ip++; assert(unum <= 1); if (unum == 0) { + if (!currently_in_except_block) { + nlr_jump(mp_obj_new_exception_msg(&mp_type_RuntimeError, "No active exception to reraise")); + } // This assumes that nlr.ret_val holds last raised // exception and is not overwritten since then. obj1 = nlr.ret_val; diff --git a/tests/basics/try-reraise.py b/tests/basics/try-reraise.py index bc817fc38..bf5e77c0b 100644 --- a/tests/basics/try-reraise.py +++ b/tests/basics/try-reraise.py @@ -1,4 +1,4 @@ -# Re-reraising last exception with raise w/o args +# Reraising last exception with raise w/o args def f(): try: @@ -10,3 +10,10 @@ try: f() except ValueError as e: print(repr(e)) + + +# Can reraise only in except block +try: + raise +except RuntimeError: + print("RuntimeError") |