Robustere Python-Programme ========================== Python [1] ist eine recht leicht zu erlernende Skriptsprache, mit der man schnell zu Ergebnissen kommt. Der leichte Einstieg in Python hat aber auch zur Folge, dass vor allem Python-Einsteiger und -Gelegenheitsprogrammierer fehleranfälligen oder umständlichen Code schreiben. Der Vortrag zeigt typische Fallen und wie man sie vermeidet. Dabei richtet er sich vor allem an Menschen, die zwar schon etwas mit Python gemacht haben, aber in dieser Programmiersprache eher Anfänger sind. Möglicherweise bekommen aber auch Software-Entwickler, die schon eine Weile mit Python arbeiten, noch den einen oder anderen Hinweis, wie sie noch robusteren Code schreiben können. Zunächst startet der Vortrag jedoch mit einigen Besonderheiten von Python, die man kennen sollte. Zum Beispiel ist vielen bekannt, dass Python Anweisungsblöcke durch deren Einrückung strukturiert. Weniger bekannt ist, dass dies eher zu Syntaxfehlern als zu Laufzeitfehlern führt und dass man Probleme aufgrund der Einrückung am besten dadurch vermeidet, dass man den Editor auch bei Drücken der Tabulatortaste immer genau vier Leerzeichen einfügen lässt. Eine ganz wesentliche Eigenschaft von Python ist, dass nicht ohne ausdrückliche Anweisung kopiert wird. Vor allem Python-Anfänger wundern sich mitunter, warum sich eine Datenstruktur geändert hat, obwohl das nicht beabsichtigt war. Der Vortrag geht ausführlich darauf ein. Hier ein paar Beispiele dafür, was in dem Vortrag außerdem angesprochen wird: - Warum funktioniert der except-Zweig "except IOError, AttributeError:" nicht wie erwartet? - Warum sollte man keine try/except-Anweisung verwenden, ohne beim except eine Ausnahme-Klasse anzugeben? - Was unterscheidet die Anweisungen "liste1 = liste2" und "liste1[:] = liste2"? - Warum schreibt man besser "wert is None" statt "wert == None"? - Was hat ein "else"-Zweig in einer "for"- oder "while"-Anweisung zu suchen? - Was für Probleme verursachen exec und eval und wie wird man sie (oft) los? - Welchen Vorteil hat "subprocess.call" gegenüber "os.system"? - Wie kann man "if liste == []:" einfacher ausdrücken? Der Vortragende ist Autor des Buches "Workshop Python" (Addison-Wesley), diverser Zeitschriftenartikel zu Python [2] und der FTP-Client-Bibliothek ftputil [3]. [1] http://www.python.org [2] http://sschwarzer.com/publications [3] http://ftputil.sschwarzer.net