I am updating a hobby app, written in Python 2.7 on Ubuntu 14.04 that stores railway history data in json. I used it upto now to work on british data.
When starting with french data I encountered a problem which puzzles me. I have a class CompaniesCache which implements __str__(). Inside that implementation everything is using str's. Let's say I instantiate a CompaniesCache and assign into a variable companies. When I, in IPython2, give the command print companies, I get an error:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe0' in position 184: ordinal not in range(128)".
Alright, that is not strange. Testing. str(companies) reproduces the error, as expected. But, companies.__str__() succeeds without problems, as does print company.__str__(). What is wrong here ?
Here the code of the __str__ method of the CompaniesCache object:
class CompaniesCache(object):                                                       
    def __init__(self, railrefdatapath):       
        self.cache = restoreCompanies(railrefdatapath)                                             
    def __getitem__(self, compcode):                                                                                     
        return self.cache[compcode.upper()]                                                                              
    def __str__(self):                                                                
        s = ''                                                                            
        for k in sorted(self.cache.keys()):                                                                              
            s += '\n%s: %s' % (k, self[k].title)                                                                
        return s
This is the code for the CompaniesCache object, which contains Company objects in its cache dict. The Company object does not implement the __str__() method.
 
     
     
    