Ich aktualisiere eine Hobby-App, geschrieben in Python 2.7 auf Ubuntu 14.04, die Eisenbahngeschichtsdaten in JSON speichert. Ich habe es bis jetzt benutzt, um an britischen Daten zu arbeiten.Python str() Funktion Ergebnis unterscheidet sich von __str __() Funktion Ergebnis
Als ich mit französischen Daten anfing, stieß ich auf ein Problem, das mich verwirrt. Ich habe eine Klasse CompaniesCache
, die __str__()
implementiert. Innerhalb dieser Implementierung verwendet alles str. Angenommen, ich instanziiere eine CompaniesCache
und weise sie in eine Variable companies
. Als ich, in IPython2, geben Sie den Befehl print companies
, ich einen Fehler:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe0' in position 184: ordinal not in range(128)".
In Ordnung, das ist nicht seltsam. Testen. str(companies)
reproduziert den Fehler wie erwartet. Aber companies.__str__()
gelingt ohne Probleme, ebenso wie print company.__str__()
. Was ist hier falsch ?
Hier ist der Code der __str__ Methode des CompaniesCache Objekts:
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
Dies ist der Code für das CompaniesCache Objekt, das Unternehmen Objekte in seinem Cache dict enthält. Das Company-Objekt implementiert die __str __() -Methode nicht.
Könnten Sie bitte etwas von Ihrem Code einbeziehen? – FlipTack
Ihre Methode '__str__' gibt ein 'Unicode'-Objekt mit nicht-ASCII-Zeichen zurück. – user2357112
Können Sie ein Beispiel einer Zeichenfolge hinzufügen? –