coercing to Unicode: need string or buffer, NoneType found
Jon Bowlas
j.bowlas at ucl.ac.uk
Thu Jul 27 06:32:53 EDT 2006
Ahh yes there are a couple of dodgy records that seem to have been added.
many thanks.
Jon
----- Original Message -----
From: "Peter Otten" <__peter__ at web.de>
Newsgroups: comp.lang.python
To: <python-list at 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
>
More information about the Python-list
mailing list