diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-11-29 05:41:10 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-11-29 05:41:10 +0300 |
commit | 0b325ba201269b3c8aab6e61c70f15c1758737d8 (patch) | |
tree | 001886d8a4335f333d04c78297a6efa2d7254841 /source/blender/python/generic/py_capi_utils.c | |
parent | 0c7fbc435f4611d6f25a58b17f7f65318bef572d (diff) |
PyAPI: PyC_Err_PrintWithFunc utility function
Move function error printing utility into py_capi_utils.
Diffstat (limited to 'source/blender/python/generic/py_capi_utils.c')
-rw-r--r-- | source/blender/python/generic/py_capi_utils.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/source/blender/python/generic/py_capi_utils.c b/source/blender/python/generic/py_capi_utils.c index d49f9514b8c..36609c6f29b 100644 --- a/source/blender/python/generic/py_capi_utils.c +++ b/source/blender/python/generic/py_capi_utils.c @@ -412,6 +412,25 @@ PyObject *PyC_Err_Format_Prefix(PyObject *exception_type_prefix, const char *for return NULL; } +/** + * Use for Python callbacks run directly from C, + * when we can't use normal methods of raising exceptions. + */ +void PyC_Err_PrintWithFunc(PyObject *py_func) +{ + /* since we return to C code we can't leave the error */ + PyCodeObject *f_code = (PyCodeObject *)PyFunction_GET_CODE(py_func); + PyErr_Print(); + PyErr_Clear(); + + /* use py style error */ + fprintf(stderr, "File \"%s\", line %d, in %s\n", + _PyUnicode_AsString(f_code->co_filename), + f_code->co_firstlineno, + _PyUnicode_AsString(((PyFunctionObject *)py_func)->func_name) + ); +} + /* returns the exception string as a new PyUnicode object, depends on external traceback module */ #if 0 |