Seite 1 von 1

print-Befehl und repr für Objekte

Verfasst: Mittwoch 29. August 2007, 17:34
von Georg
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 ?

Verfasst: Mittwoch 29. August 2007, 19:49
von BlackMamba
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 :-)

Re: print-Befehl und repr für Objekte

Verfasst: Mittwoch 29. August 2007, 20:09
von Leonidas
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.

Re: print-Befehl und repr für Objekte

Verfasst: Donnerstag 30. August 2007, 12:20
von Georg
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.

Verfasst: Donnerstag 30. August 2007, 12:31
von Georg
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.