[Python-de] Typ-Prüfung
Georg Mischler
schorsch at schorsch.com
Mit Sep 17 10:59:29 CEST 2003
Lutz Schröer wrote:
> nachdem Rainer mich einigermaßen überzeugt hat, das man Ausnahmen
> wirklich nur in Ausnahmen nutzen sollte
Man sollte da nicht in Dogmatismus verfallen. In der Praxis hat
es sich (auch aus Performance-Gruenden) bewaehrt, sich in
diejenigen Faellen auf Exceptions zu verlassen, welche "relativ
selten" auftreten. Wenn ein einfacher Vergleich als Ersatz
ausreicht (oder sogar eine einfache Berechnung), dann ist deren
Einsatz aber haeufig wirklich naheliegender.
> Im Kochbuch wird auch
> folgende Variante angeboten:
>
> def isString(s):
> return isinstance(s, type(''))
>
> Das funktioniert aber erst ab Python 2.0 und auch nicht mit Unicode.
Das funktioniert problemlos auch mit Python 1.5, aber in der
Tat nicht mit Unicode. Wenn du Versionsunabhaengigkeit *und*
Unicode willst, dann koennte folgendes helfen:
import types
if hasattr(types, 'UnicodeType'):
_stypes = (types.StringType, types.UnicodeType)
else:
_stypes = (types.StringType,)
if not hasattr(__builtins__, 'True'):
True = 1
False = 0
def isString(s):
for t in _stypes:
if isinstance(s, t): return True
return False
Die for-Schlaufe ist notwendig, weil isinstance() in 1.5 noch nicht
mit Listen/Tupeln umgehen kann, die musst du also selber behandeln.
Ich behaupte nicht, dass dies das Maximum an Eleganz ist, aber
das sind Kompatibilitaetsloesungen selten. Immerhin sollte es
fuer (fast ;) jeden Python-Entwickler verstaendlich sein.
-schorsch
--
Georg Mischler -- simulations developer -- schorsch at schorsch com
+schorsch.com+ -- lighting design tools -- http://www.schorsch.com/