Jon Bowlas wrote: > I wrote this script in Zope some time ago and it worked for a while, but > now I'm getting the following error: > TypeError: coercing to Unicode: need string or buffer, NoneType found > > Here's my script: > > results = context.module_retriever().tuples() # call to ZSQLMethod > converted = [] > for result in results: > result = list(result) # make a list from the tuple > for i in range(len(result)): > # for each element in the listified tuple, make decode to a > # unicode from the latin-1 string > result[i] = unicode(result[i], 'latin-1') > converted.append(tuple(result)) # tuplify again > return converted > > Where module_retriever is a simple Z SQL method that returns a module > title and a module code. > So results = context.module_retriever().tuples() returns: > [('Developmental Neurobiology', 'ANAT2008'), ('Neuroanatomy', > 'ANAT2009'),('etc...', 'etc..'),..]So I was hoping someone might be able > to identify what I've done wrong here. It is a little mistifying as to why > it's suddenly stopped working though.CheersJon
This may be an indication that in your database you have a record with a None value, e. g. [('Developmental Neurobiology', 'ANAT2008'), ('Neuroanatomy', 'ANAT2009'), ('Man in black', None)]) and most likely the right fix is to correct the database entry and make sure that no new such records can be entered into it. If that is not possible, a quick fix would be to replace your unicode() call with something that special-cases None: def from_latin(s): if s is None: return None # or maybe 'return u""', if your app expects a unicode # string return unicode(s, "latin-1") By the way, in recent Python your snippet might become converted = [] for record in results: # prior to 2.4: tuple([...]) converted.append(tuple(from_latin(field) for field in record)) return converted Peter -- http://mail.python.org/mailman/listinfo/python-list