|
|
@@ -228,6 +228,21 @@ call_python_func(PyObject *function, PyObject *args) {
|
|
|
// In the main thread, just call the function.
|
|
|
result = PyObject_Call(function, args, NULL);
|
|
|
|
|
|
+ if (result == (PyObject *)NULL) {
|
|
|
+ // Temporarily save and restore the exception state so we can print a
|
|
|
+ // callback on-the-spot.
|
|
|
+ PyObject *exc, *val, *tb;
|
|
|
+ PyErr_Fetch(&exc, &val, &tb);
|
|
|
+
|
|
|
+ Py_XINCREF(exc);
|
|
|
+ Py_XINCREF(val);
|
|
|
+ Py_XINCREF(tb);
|
|
|
+ PyErr_Restore(exc, val, tb);
|
|
|
+ PyErr_Print();
|
|
|
+
|
|
|
+ PyErr_Restore(exc, val, tb);
|
|
|
+ }
|
|
|
+
|
|
|
} else {
|
|
|
#ifdef SIMPLE_THREADS
|
|
|
// We can't use the PyGILState interface, which assumes we are using
|