print-Befehl und repr für Objekte

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Georg
User
Beiträge: 18
Registriert: Mittwoch 29. August 2007, 17:01

Ich will zur Fehlersuche eine NamedNodeMap aus dem Modul xml.dom mit print ausgeben. Wenn es klappt, sieht es folgendermaßen aus:

Code: Alles auswählen

<NamedNodeMap at 8277f4c: {(None, u'POSITION'): <Attribute Node at 827942c: Name="POSITION", Value="right">, (None, u'TEXT'): <Attribute Node at 827986c: Name="TEXT", Value="Christopher">, (None, u'ID'): <Attribute Node at 8279cac: Name="ID", Value="_">, (None, u'MODIFIED'): <Attribute Node at 8277fcc: Name="MODIFIED", Value="1188401475130">, (None, u'CREATED'): <Attribute Node at 827b10c: Name="CREATED", Value="1187432777498">}>
Wenn aber der Value-String hinter Name="TEXT" einen Umlaut enthält, dann scheitert __repr__ in NamedNodeMap :

Code: Alles auswählen

node Traceback (most recent call last):
  File "freemind.py", line 31, in <module>
    print walker.currentNode.tagName, walker.currentNode.attributes
  File "/usr/lib/python2.5/site-packages/_xmlplus/dom/NamedNodeMap.py", line 148, in __repr__
    st = st + repr(k) + ': ' + repr(self[k]) + ', '
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 48: ordinal not in range(128)
Ich stelle mir vor, dass print eine __repr__-Methode von NamedNodeMap ruft. Wie kann ich nun solchen Methoden beibringen, encode('utf-8') zu verwenden ?
BlackMamba
User
Beiträge: 77
Registriert: Samstag 24. März 2007, 23:22
Wohnort: Germany,NRW,

Das Python nicht einfach so Texte, bzw Dateien, bzw ganz allgemein Variabeln, selbt Kommentare mit Umlauten, nicht akzeptiert ist ja allgemein bekannt.

Schau die mal diesen Thread an, vlt hilft er dir weiter:
http://www.python-forum.de/topic-676.ht ... ght=umlaut


vlt. kannste wie im Beispiel, die Sonderzeichen abfangen. Ist nur so eine spontane Idee, da ich gerade am Fußball schauen bin. Ich mach mir nachher noch mehr Gedanken dazu :-)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Georg hat geschrieben:Wie kann ich nun solchen Methoden beibringen, encode('utf-8') zu verwenden ?
Kann es sein, dass du PyXML nutzt? Mir scheint, als wäre dort einfach ein Bug, denn ``repr()`` sollte eigentlich nie kotzen, da es die Zeichen nicht interpretieren muss sondern als Bytefolgen anzeigen kann.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Georg
User
Beiträge: 18
Registriert: Mittwoch 29. August 2007, 17:01

Leonidas hat geschrieben:Kann es sein, dass du PyXML nutzt?
Wenn es jetzt Python/XML heißt, dann ja. Was ich mache, geht auf dieses HOWTO zurück.
Mir scheint, als wäre dort einfach ein Bug, denn ``repr()`` sollte eigentlich nie kotzen, da es die Zeichen nicht interpretieren muss sondern als Bytefolgen anzeigen kann.
Gut, damit könnte ich leben.
Georg
User
Beiträge: 18
Registriert: Mittwoch 29. August 2007, 17:01

BlackMamba hat geschrieben:vlt. kannste wie im Beispiel, die Sonderzeichen abfangen.
An die Strings in der NamedNodeMap komme ich nur über Methoden ( im fertigen Programm ) ODER über print ( vorläufig zum Kennenlernen ). Die Strings aus den Methoden behandle ich mit encode() und das klappt. Wie man es beim print-Befehl richtig macht, das interessiert mich.
Antworten