diff --git a/panda/src/pipeline/thread.cxx b/panda/src/pipeline/thread.cxx index a0ef82f9ec..5c412ae237 100644 --- a/panda/src/pipeline/thread.cxx +++ b/panda/src/pipeline/thread.cxx @@ -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