TypeError: cannot add type "Python Method" to string
I am using a typical lookup routine in a python script to find information about objects and return some of their properties. The method works great when you are making a comparison of strings. E.g., the following code is working just fine... # Define a function to retrieve a particular class based on the element number... def get_class_by_title(objList, given_title): found = 0 ret_list = [] # Run through the objects in the staff folder to see if there is a match (with title)... for obj in objList: if found == 0: if given_title == obj.title: ret_list.append(obj.absolute_url) # List element 0 ret_list.append(obj.title) # List element 1 ret_list.append(obj.element_number) # List element 2 ret_list.append(obj.instance_type) # List element 3 ret_list.append(obj.derived_from) # List element 4 ret_list.append(obj.figure_number) # List element 5 found = 1 # Set flag on success... # Return indicative values if the desired object was not found... if found == 0: ret_list.append('Error') ret_list.append('Error') ret_list.append(-1) ret_list.append('Error') ret_list.append('Error') ret_list.append('Error') return ret_list ------------ ... which is called by... m = get_class_by_title(classList, j) Unfortunately, the same, it seems, cannot be said when I make the comparison using something other than a string. For example... # Define a function to retrieve a particular class association based on the element number... def get_class_association_by_element_number(objList, given_element_number): found = 0 ret_list = [] # Run through the objects in the staff folder to see if there is a match (with given_element_number)... try: for obj in objList: if found == 0: if given_element_number == obj.element_number: ret_list.append(obj.absolute_url) # List element 0 ret_list.append(obj.title) # List element 1 ret_list.append(obj.element_number) # List element 2 ret_list.append(obj.instance_type) # List element 3 ret_list.append(obj.f_class) # List element 4 ret_list.append(obj.to_class) # List element 5 found = 1 # Set flag on success... except: ret_list.append('Blew out of try block.') ret_list.append('Error') ret_list.append(-1) ret_list.append('Error') ret_list.append('Error') ret_list.append('Error') found = 1 # Return indicative values if the desired object was not found... if found == 0: ret_list.append('Error') ret_list.append('Error') ret_list.append(-1) ret_list.append('Error') ret_list.append('Error') ret_list.append('Error') return ret_list ... consistently returns an error when called by... n = get_class_association_by_element_number(classAssociationList, string.atoi(j)) where j is a string element that is stored in a lines property of the object in question. When this code is executed, I get a TypeError: cannot add type "Python Method" to string Does anyone know what the problem is? Note, I've done some diagnostics and simply had the method return the input value (given_element_number) and it does so properly. Here is the rest of the diagnostic information... Traceback (innermost last): File /usr/local/zope/2-4-3/lib/python/ZPublisher/Publish.py, line 223, in publish_module File /usr/local/zope/2-4-3/lib/python/ZPublisher/Publish.py, line 187, in publish File /usr/local/zope/2-4-3/lib/python/Zope/__init__.py, line 226, in zpublisher_exception_hook (Object: 066543_0103) File /usr/local/zope/2-4-3/lib/python/ZPublisher/Publish.py, line 171, in publish File /usr/local/zope/2-4-3/lib/python/ZPublisher/mapply.py, line 160, in mapply (Object: get_text) File /usr/local/zope/2-4-3/lib/python/ZPublisher/Publish.py, line 112, in call_object (Object: get_text) File /usr/local/zope/2-4-3/lib/python/Shared/DC/Scripts/Bindings.py, line 324, in __call__ (Object: get_text) File /usr/local/zope/2-4-3/lib/python/Shared/DC/Scripts/Bindings.py, line 354, in _bindAndExec (Object: get_text) File /usr/local/zope/2-4-3/lib/python/Products/PythonScripts/PythonScript.py, line 363, in _exec (Object: get_text) (Info: ({'script': <PythonScript instance at 8ae0a88>, 'context': <Folder instance at 8cd9a20>, 'container': <Folder instance at 8b17d48>, 'namespace': <TemplateDict object at 0x87eb248>, 'traverse_subpath': []}, ('0',), {}, None)) File Script (Python), line 264, in get_text TypeError: (see above) This is a really strange error. Can anyone give me a hint as to what the problem is? Thanks in advance, Ron
Ronald.Chichester@bakerbotts.com writes:
.... I am almost sure that your problem is not in the Python script the code of which you posted...
I expect it higher above in the call chain of your script, somewhere where you use the script's results. Apparently, you try to add a string and a Python Method. While adding a string to a string will work (--> concatenation) (maybe this happens in your successful first case), adding a Python Method to a string will (correctly) fail (happens in your second case). Dieter
participants (2)
-
Dieter Maurer -
Ronald.Chichester@bakerbotts.com