[Bf-blender-cvs] [7beef1fd33b] master: PyAPI: simplify syntax error reports

Campbell Barton noreply at git.blender.org
Mon Jul 27 13:02:15 CEST 2020


Commit: 7beef1fd33b37f62d14a7de7150cfc7b0d88f159
Author: Campbell Barton
Date:   Mon Jul 27 13:46:51 2020 +1000
Branches: master
https://developer.blender.org/rB7beef1fd33b37f62d14a7de7150cfc7b0d88f159

PyAPI: simplify syntax error reports

The result of syntax errors read poorly in reports,
resulting in cryptic and unhelpful information.

Change PyC_ExceptionBuffer_Simple only to extract the initial text,
making syntax errors when entering invalid numeric expressions into
buttons easier to follow.

===================================================================

M	source/blender/python/generic/py_capi_utils.c

===================================================================

diff --git a/source/blender/python/generic/py_capi_utils.c b/source/blender/python/generic/py_capi_utils.c
index f46588206ee..406dbdafe22 100644
--- a/source/blender/python/generic/py_capi_utils.c
+++ b/source/blender/python/generic/py_capi_utils.c
@@ -634,7 +634,7 @@ error_cleanup:
 
 PyObject *PyC_ExceptionBuffer_Simple(void)
 {
-  PyObject *string_io_buf;
+  PyObject *string_io_buf = NULL;
 
   PyObject *error_type, *error_value, *error_traceback;
 
@@ -648,7 +648,19 @@ PyObject *PyC_ExceptionBuffer_Simple(void)
     return NULL;
   }
 
-  string_io_buf = PyObject_Str(error_value);
+  if (PyErr_GivenExceptionMatches(error_type, PyExc_SyntaxError)) {
+    /* Special exception for syntax errors,
+     * in these cases the full error is verbose and not very useful,
+     * just use the initial text so we know what the error is. */
+    if (PyTuple_CheckExact(error_value) && PyTuple_GET_SIZE(error_value) >= 1) {
+      string_io_buf = PyObject_Str(PyTuple_GET_ITEM(error_value, 0));
+    }
+  }
+
+  if (string_io_buf == NULL) {
+    string_io_buf = PyObject_Str(error_value);
+  }
+
   /* Python does this too */
   if (UNLIKELY(string_io_buf == NULL)) {
     string_io_buf = PyUnicode_FromFormat("<unprintable %s object>", Py_TYPE(error_value)->tp_name);



More information about the Bf-blender-cvs mailing list