updated for version 7.4.107
Problem: Python: When vim.eval() encounters a Vim error, a try/catch in the
Python code doesn't catch it. (Yggdroot Chen)
Solution: Throw exceptions on errors in vim.eval(). (ZyX)
diff --git a/src/if_py_both.h b/src/if_py_both.h
index e6db4a3..a8188c1 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -566,6 +566,28 @@
PyErr_SetNone(PyExc_KeyboardInterrupt);
return -1;
}
+ else if (msg_list != NULL && *msg_list != NULL)
+ {
+ int should_free;
+ char_u *msg;
+
+ msg = get_exception_string(*msg_list, ET_ERROR, NULL, &should_free);
+
+ if (msg == NULL)
+ {
+ PyErr_NoMemory();
+ return -1;
+ }
+
+ PyErr_SetVim((char *) msg);
+
+ free_global_msglist();
+
+ if (should_free)
+ vim_free(msg);
+
+ return -1;
+ }
else if (!did_throw)
return (PyErr_Occurred() ? -1 : 0);
/* Python exception is preferred over vim one; unlikely to occur though */