pydoc re

Das hier nennt man dann wohl kwalitätssicherung:

Screenshot pydoc re in einem Terminal -- The following documentation is automatically generated from the Python source files.  It may be incomplete, incorrect or include features that are considered implementation detail and may vary between Python implementations.  When in doubt, consult the module reference at the location listed above.

Kurze übersetzung für nicht-techniker: Wir dokumentieren unsere standardbibliotek zwar im kwelltext und wir haben ein tolles progrämmchen, mit dem man sich diese dokumentazjon bekwem anschauen kann, aber was da drinsteht, kann völlig falsch, irreführend, veraltet und unbrauchbar sein. Großes kino!

Übrigens: wenn ihr jemals ein CGI-skript in python schreibt und euch wundert, dass das bei der ausgabe mit print() komische exceptions für unicode-fehler schmeißt — das liegt daran, dass dieses depperte python in den umgebungsvariablen für die eingestellte locale nachschaut, was für ein zeichensatz verwendet wird und seine interne unicode-darstellung dorthin konvertiert. In einer shell funkzjoniert das wunderbar. In der umgebung, die so ein websörver beim aufruf eines CGI-programmes setzt, steht so etwas aber natürlich nicht drin. Und wenn man dann nur ein einziges zeichen ausgibt, das über 7-bit-ASCII hinausgeht, weiß dieses python nicht, was es damit machen soll und behandelt das als fehler.

Es gibt mehrere möglichkeiten, diesen fehler zu umschiffen. Die möglichkeit, die ich empfehle, ist, einfach bytestrings auszugeben und nicht-ascii-zeichen in XML-entitäten umzuwandeln. Wenn in der variablen output drinsteht, was ausgegeben werden soll, könnte das ungefähr so aussehen:

sys.stdout.flush()
sys.stdout.buffer.write(output.encode('ascii', 'xmlcharrefreplace'))

Ja, das ist ein bisschen stupide. Der flush() steht da übrigens für den fall, dass schon etwas „ganz normal“ mit print() ausgegeben wurde, etwa ein paar HTTP-kopfzeilen — print() ist aus den üblichen fiesheitsgründen gebuffert. Die meldung „malformed headers“ im log des websörvers ist dann auch nicht wirklich hilfreich.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.