[Python-de] print von Nicht-ASCII-Zeichen

Alexander 'boesi' Bösecke boesi.josi at gmx.net
Mit Sep 13 11:52:16 CEST 2006


Hi

Am 10.09.2006 11:14:09 schrieb Martin v. Löwis:

> Das encoding von sys.stdout wird deshalb nicht gesetzt, weil kein
> sinnvoller Wert dafür ermittelt werden kann. Der Traceback wird ganz
> normal auf den STDOUT-Handle des Betriebssystems ausgegeben. In einer
> Windows-Anwendung ist es dann Windows, was die Ausgabe verwirft.

Danke für die Klarstellung, wer wofür verantwortlich ist. 
 
> > Wenn der print-Befehl schon
> > ausgeführt wird, sollten dann diese EncodeErrors nicht ignoriert werden?
> > Oder überseh ich jetzt irgendwas?
> 
> Dieses Argument verstehe ich nicht. Fehler sollten nie ignoriert werden,
> es sei denn, die Anwendung ignoriert sie explizit (siehe auch den
> Zen von Python).

Das ist mir schon klar. Nur in meinem Verständnis gehört zu einem Fehler
auch eine verwertbare Fehlermeldung. Und die ist hier ja nicht gegeben.
Ganz im Gegenteil, wenn es eine (sichtbare) Fehlermeldung geben könnte,
tritt der Fehler nicht auf. 

Man könnte vielleicht auch so argumentieren, wenn kein stdout sichtbar
ist, ist dies ein explizites Ignorieren von Encoding-Fehlern. Aber diese
Argumentation ist schon wieder ziemlich implizit.

Vielleicht sollte der print-Befehl auch keinen EncodeError auslösen,
sondern eher ein "EncodeWarning"? Mir fällt keine sinnvolle Anwendung
ein, wo ein Encoding-Fehler wirklich kritisch wäre (in Verbindung mit
dem print-Befehl).

> > So what is it? Bug or feature?
> 
> Es ist m.E. ein Bug, dass in pythonw sys.stdout.encoding nicht
> gesetzt ist. Allerdings kann ich mir keine vernünftige Codeänderung
> vorstellen, die diesen Bug behebt. Patches sind herzlich willkommen.
> 
> Man müsste erkennen, dass Windows stdout "ins nichts" leitet,
> und könnte dann gefahrlos encoding auf "UTF-8" setzen. 

Warum kann man nicht UTF-8 als Standard anstatt ASCII nehmen? Wenn ein
Encoding-Fehler bei sichtbaren stdout auftritt, ist das ja leicht
erkennbar (und behebbar).

> Ich weiß
> aber keine Win32-API-Rufe, mit denen man erkennen kann, dass
> der stdout-Filehandle ins nichts geht.

Einer der vielen Gründe, warum ich Python so mag, ist das ich mich
gerade nicht mit der Win32-Api rumschlagen muss...


cu boesi
-- 
--==SECURITY ALERT==--
Your Computer Is Currently Broadcasting An
Internet IP Address. With This Address,
Someone Can Begin Attacking Your Computer.



More information about the python-de mailing list