summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--py/vm.c3
-rw-r--r--tests/basics/try-reraise.py9
2 files changed, 11 insertions, 1 deletions
diff --git a/py/vm.c b/py/vm.c
index f340f5219..d28416db3 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -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")