string to list when the contents is a list

Wes James comptekki at gmail.com
Thu Feb 18 14:56:16 EST 2010


On Thu, Feb 18, 2010 at 12:32 PM, Wes James <comptekki at gmail.com> wrote:
> On Thu, Feb 18, 2010 at 8:18 AM, Tim Chase
> <python.list at tim.thechases.com> wrote:
>> Wes James wrote:
> <snip>
>
>>
>> Just to add to the list of solutions I've seen, letting the built-in csv
>> module do the heavy lifting:
>>
>>  >>> s = "['a','b']"
>>  >>> import csv
>>  >>> no_brackets = s[1:-1] # s.strip(' \t[]')
>>  >>> c = csv.reader([no_brackets], quotechar="'")
>>  >>> c.next()
>>  ['a', 'b']


Hmm.  When I put csv.reader in a class:

import csv

class IS_LIST():
    def __init__(self, format='', error_message='must be a list!'):
        self.format = format
        self.error_message = error_message
    def __call__(self, value):
        try:
            if value=='[]' or value=='':
            	value=[]
            else:
            	no_brackets = value[1:-1] # s.strip(' \t[]')
            	c = csv.reader([no_brackets], quotechar="'")
		value=c.next()
            return (value, None)
        except:
            return (value, self.error_message)
    def formatter(self, value):
        return value

I get an error (when I take the "try" out):

AttributeError: 'function' object has no attribute 'reader'

Why?

-wes



More information about the Python-list mailing list