diff --git a/py/vm.c b/py/vm.c
index 5e3ec0baf8242d9d51c0b7de3559370f9cb276c9..e2bb3de642b191c0d6e059d8d7c258cba5b7831a 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -474,6 +474,13 @@ bool mp_execute_byte_code_2(const byte **ip_in_out, mp_obj_t *fastn, mp_obj_t **
                         assert(exc_sp == &exc_stack[0] - 1);
                         return false;
 
+                    case MP_BC_RAISE_VARARGS:
+                        unum = *ip++;
+                        assert(unum == 1);
+                        obj1 = POP();
+                        nlr_jump(obj1);
+                        return false;
+
                     case MP_BC_YIELD_VALUE:
                         nlr_pop();
                         *ip_in_out = ip;
diff --git a/tests/basics/tests/try1.py b/tests/basics/tests/try1.py
index b3b85372d7f21966327e35368a1e9fc852950596..56d30750417d5897b48ca54982d00de9b69c7b6c 100644
--- a/tests/basics/tests/try1.py
+++ b/tests/basics/tests/try1.py
@@ -4,3 +4,8 @@ try:
     x.a()
 except:
     print(x)
+
+try:
+    raise IndexError
+except IndexError:
+    print("caught")