[Python-de] Typ-Prüfung

Gerhard Häring gh at ghaering.de
Mit Sep 17 15:14:20 CEST 2003


Lutz Schröer wrote:
> [...]
> def isString(s):
>   try: s += ' '
>   except: return 0
>   else: return 1
> 
> Wie kann ich das auch ohne Exception lösen? Im Kochbuch wird auch 
> folgende Variante angeboten:
> 
> def isString(s):
>   return isinstance(s, type(''))

Das type('') ist wg. Kompatibilität mit antiken (< 2.2) 
Python-Versionen. Falls auch Unicode-Strings für dich Strings sind, ist 
mein Test ab Python 2.3:

	isinstance(s, basestring)

und wenn 2.2 unterstützt werden soll:

	isinstance(s, (str, unicode))

Aber wenn ich ehrlich sein soll, finde ich deinen Ansatz prinzipiell 
b0rken. Da es in Python keine Methodenüberladung anhand der 
Parametertypen gibt (wie heisst der Fachbegriff noch mal?), würde ich 
einfach *zwei* Methoden schreiben. Eine für einen String, eine für eine 
Liste.

> Das funktioniert aber erst ab Python 2.0 und auch nicht mit Unicode. 
> Da es sich um ein Modul handelt, das ich veröffentlichen will, sollte 
> es möglichst universell, am besten Version-1.5- kompatibel und kein 
> Code-Monster sein (ich will's wenigstens selber noch verstehen).

Unicode-Unterstützung und 1.5.2-Kompatibilität zusammen. Viel Spass.

> Wobei sich mir auch gerade die Frage stellt, ob man beim Erstellen 
> von Modulen noch auf die Version 1.5 Rücksicht nehmen sollte (und wie 
> lange noch) oder eine andere Version (welche?) als allgemein vorrätig 
> und benutzt vorraussetzen kann?

Wenn ich was als Open Source veröffentliche, mache ich dass weil mir die 
Entwicklung Spass macht. Und alles < 2.2 ist für mich kein Spass :-/ Und 
was mir nicht Spass macht, mache ich nur gegen Geld, denn das nennt sich 
dann Arbeit ;-)

Ich setzte bei meinem Zeug schon lange mindestens 2.1 voraus und in den 
nächsten Major-Releases meiner Datenbank-Module 2.2.

Ich leiste gern meinen Beitrag dazu, Leute zum Upgrade von Python zu 
bewegen :-D

-- Gerhard