[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39700] trunk/blender/source/blender/ python/intern: error when a python operator gave an incorrect return value was near useless , re-raise a more comprehensive error which includes the operator name.

Campbell Barton ideasman42 at gmail.com
Thu Aug 25 19:54:31 CEST 2011


Revision: 39700
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39700
Author:   campbellbarton
Date:     2011-08-25 17:54:30 +0000 (Thu, 25 Aug 2011)
Log Message:
-----------
error when a python operator gave an incorrect return value was near useless, re-raise a more comprehensive error which includes the operator name.

Modified Paths:
--------------
    trunk/blender/source/blender/python/intern/bpy_operator.c
    trunk/blender/source/blender/python/intern/bpy_rna.c

Modified: trunk/blender/source/blender/python/intern/bpy_operator.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_operator.c	2011-08-25 17:12:53 UTC (rev 39699)
+++ trunk/blender/source/blender/python/intern/bpy_operator.c	2011-08-25 17:54:30 UTC (rev 39700)
@@ -293,7 +293,7 @@
 	 * function corrects bpy.data (internal Main pointer) */
 	BPY_modules_update(C);
 
-	/* needed for when WM_OT_read_factory_settings us called fro within a script */
+	/* needed for when WM_OT_read_factory_settings us called from within a script */
 	bpy_import_main_set(CTX_data_main(C));
 
 	/* return operator_ret as a bpy enum */

Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.c	2011-08-25 17:12:53 UTC (rev 39699)
+++ trunk/blender/source/blender/python/intern/bpy_rna.c	2011-08-25 17:54:30 UTC (rev 39700)
@@ -6417,7 +6417,21 @@
 			err= -1;
 		}
 		else if(ret_len==1) {
-			err= pyrna_py_to_prop(&funcptr, pret_single, retdata_single, ret, "calling class function:");
+			err= pyrna_py_to_prop(&funcptr, pret_single, retdata_single, ret, "");
+
+			/* when calling operator funcs only gives Function.result with
+			 * no line number since the func has finished calling on error,
+			 * re-raise the exception with more info since it would be slow to
+			 * create prefix on every call (when there are no errors) */
+			if(err == -1 && PyErr_Occurred()) {
+				PyObject *error_type, *error_value, *error_traceback;
+				PyErr_Fetch(&error_type, &error_value, &error_traceback);
+
+				PyErr_Format(error_type,
+				             "expected class %.200s, function %.200s: incompatible return value%S",
+				             RNA_struct_identifier(ptr->type), RNA_function_identifier(func),
+				             error_value);
+			}
 		}
 		else if (ret_len > 1) {
 




More information about the Bf-blender-cvs mailing list