[Python-de] Was ich schon immer zu Python fragen wollte und mich nie getraut habe

Martin v. Loewis martin at v.loewis.de
Tue Oct 22 22:35:00 EDT 2002


Gerson.Kurz at t-online.de (Gerson Kurz) writes:

> Wie schreibe ich folgenden Code portabel:
> 
> try:
> 	files = os.listdir( irgendwas )
> 
> except WindowsError, werr:
> 	# fehlercode auswerten, z.B. meldung bei Access Denied

Hängt davon ab, was in "fehlercode auswerten" passiert. WindowsError
ist eine Ableitung von OSError. Du kannst also auch

except OSError, err:
  # err.errno auswerten, ...

schreiben - das funktioniert dann auf allen Systemen.

> [2] Wie frage ich korrekt auf "Umgebung ist Windows" ab?
> 
> if os.name == "nt":
> 
> wird ja wohl klappern unter 9x (keine Ahnung, ich habe kein 9x).

Üblich ist eher

if sys.platform == "win32":


> [3] Gibt es eigentlich eine Möglichkeit, den %-operator als Funktion auf
> Strings aufzurufen? Ein dir("") liefert keine offensichtliche Anregung.

Alle Operatoren sind im Modul operator als Funktionen vorhanden, in
diesem Fall operator.__mod__.

> Hintergrund: Nein, ich will das nicht für neue lambda-Wirrnisse benutzen,
> sondern möchte halt z.B. %-argumente on-the-fly zusammenbasteln und dann
> ausgeben -> da das %-argument entweder ein Tupel (oder ein Dict sein muß,
> dann aber auch mit keywords), ist das etwas unhandlich.

Das verstehe ich nicht ganz: Kannst Du dann am Ende nicht immer noch
den %-Operator einfach so hinschreiben?

> 
> in python:
> 
> if decdigit(x):
> 	// add x to decint
> 	while decdigit(x):
> 		// add x to decint

Wie wär's mit

while 1:
  // add x to decint
  if not decdigit(x): break

> [5] Gibt es einen *simplen* Beispielproject für eine Pythonextension
> unter Linux (oder Unixoiden Betriebssystemen allgemein) ? Damit
> meine ich ohne SWIG, Netz und doppelten Boden, so wie mein
> http://p-nand-q.com/python/pysapi.zip ?

Ich hab' das mal auf distutils umgeschrieben:

http://www.informatik.hu-berlin.de/~loewis/pysapi-1.0.tar.gz

Sollte so auch unverändert unter Windows funktionieren. Probiere mal
folgende Kommandos:

python setup.py build     # erzeugt build/lib-system/pysapi.so
python setup.py sdist     # erzeugt das Tarfile
python setup.py install   # installiert pysapi.so an die richtige Stelle
python setup.py bdist_rpm # Nur unter Linux
python setup.py bdist_wininst # Nur unter Windows

MANIFEST.in braucht man nur für sdist, weil es sonst nicht weiss, dass
pysapi.h auch dazu gehört.

Ciao,
Martin





More information about the Python-de mailing list