Ahh yes there are a couple of dodgy records that seem to have been added. many thanks.
Jon ----- Original Message ----- From: "Peter Otten" <[EMAIL PROTECTED]> Newsgroups: comp.lang.python To: <python-list@python.org> Sent: Thursday, July 27, 2006 11:22 AM Subject: Re: coercing to Unicode: need string or buffer, NoneType found > 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 > -- http://mail.python.org/mailman/listinfo/python-list