Rheinwerk Computing < openbook >

 
Inhaltsverzeichnis
1 Einleitung
2 Die Programmiersprache Python
Teil I Einstieg in Python
3 Erste Schritte im interaktiven Modus
4 Der Weg zum ersten Programm
5 Kontrollstrukturen
6 Dateien
7 Das Laufzeitmodell
8 Funktionen, Methoden und Attribute
9 Informationsquellen zu Python
Teil II Datentypen
10 Das Nichts – NoneType
11 Operatoren
12 Numerische Datentypen
13 Sequenzielle Datentypen
14 Zuordnungen
15 Mengen
16 Collections
17 Datum und Zeit
18 Aufzählungstypen – Enum
Teil III Fortgeschrittene Programmiertechniken
19 Funktionen
20 Modularisierung
21 Objektorientierung
22 Ausnahmebehandlung
23 Iteratoren
24 Kontextobjekte
25 Manipulation von Funktionen und Methoden
Teil IV Die Standardbibliothek
26 Mathematik
27 Kryptografie
28 Reguläre Ausdrücke
29 Schnittstelle zu Betriebssystem und Laufzeitumgebung
30 Kommandozeilenparameter
31 Dateisystem
32 Parallele Programmierung
33 Datenspeicherung
34 Netzwerkkommunikation
35 Debugging und Qualitätssicherung
36 Dokumentation
Teil V Weiterführende Themen
37 Anbindung an andere Programmiersprachen
38 Distribution von Python-Projekten
39 Grafische Benutzeroberflächen
40 Python als serverseitige Programmiersprache im WWW – ein Einstieg in Django
41 Wissenschaftliches Rechnen
42 Insiderwissen
43 Von Python 2 nach Python 3
A Anhang
Stichwortverzeichnis

Download:
- Beispielprogramme, ca. 464 KB

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Python 3 von Johannes Ernesti, Peter Kaiser
Das umfassende Handbuch
Buch: Python 3

Python 3
Pfeil 43 Von Python 2 nach Python 3
Pfeil 43.1 Die wichtigsten Unterschiede
Pfeil 43.1.1 Ein-/Ausgabe
Pfeil 43.1.2 Iteratoren
Pfeil 43.1.3 Strings
Pfeil 43.1.4 Ganze Zahlen
Pfeil 43.1.5 Exception Handling
Pfeil 43.1.6 Standardbibliothek
Pfeil 43.1.7 Neue Sprachelemente in Python 3
Pfeil 43.2 Automatische Konvertierung
Pfeil 43.3 Geplante Sprachelemente
 
Zum Seitenanfang

43.2    Automatische Konvertierung Zur vorigen ÜberschriftZur nächsten Überschrift

Um die Migration von Python 2 nach Python 3 auch bei größeren Projekten zu vereinfachen, gibt es in der Python-3-Distribution ein Tool namens 2to3, das wir Ihnen in diesem Abschnitt vorstellen möchten. Das Tool 2to3 finden Sie im Unterverzeichnis Tools/scripts Ihrer Python-Distribution.

Die Verwendung von 2to3 wird exemplarisch an folgendem Python-2-Beispielprogramm demonstriert:

def getInput(n):
liste = []
for i in xrange(n):
try:
z = int(raw_input("Bitte eine Zahl eingeben: "))
except Exception, e:
raise ValueError("Das ist keine Zahl!")
liste.append(z)
return liste
try:
res = getInput(5)
print res
except ValueError, e:
print e.args[0]

Dieses Programm liest mithilfe der Funktion getInput fünf Zahlen vom Benutzer ein und gibt eine mit diesen Zahlen gefüllte Liste aus. Wenn der Benutzer etwas eingibt, was keine Zahl ist, beendet sich das Programm mit einer Fehlermeldung. Sie sehen sofort, dass sich dieses Programm so nicht unter Python 3 ausführen lässt. Die Aufrufe von xrange, raw_input sowie die beiden except-Anweisungen verhindern dies.

Bereits bei den oben dargestellten 14 Quellcodezeilen ist es mühselig, den Code per Hand mit Python 3 kompatibel zu machen. Stellen Sie sich diese Arbeit einmal für ein größeres Projekt vor! Doch glücklicherweise gibt es 2to3. Wir rufen 2to3 einmal mit dem Namen unseres Python-Programms als einzigem Parameter auf. Das Ergebnis sieht folgendermaßen aus:

--- test.py (original)
+++ test.py (refactored)
@@ -1,15 +1,15
def getInput(n):
liste = []
- for i in xrange(n):
+ for i in range(n):
try:
- z = int(raw_input("Bitte eine Zahl eingeben: "))
- except ValueError, e:
+ z = int(input("Bitte eine Zahl eingeben: "))
+ except ValueError as e:
raise ValueError("Das ist keine Zahl!")
liste.append(z)
return liste
try:
res = getInput(5)
- print res
-except ValueError, e:
- print e.args[0]
+ print(res)
+except ValueError as e:
+ print(e.args[0])

Das Konvertierungsprogramm ändert Ihre angegebenen Quellcodedateien standardmäßig nicht, sondern produziert nur einen diff-Ausdruck. Das ist eine spezielle Beschreibungssprache für die Unterschiede zwischen zwei Textstücken. Diesen diff-Ausdruck können Sie beispielsweise mithilfe des Unix-Programms patch in Ihre Quelldatei einpflegen. Alternativ erlauben Sie es dem 2to3-Skript über den Kommandoschalter -w, die angegebene Quelldatei direkt zu modifizieren. Der ursprüngliche Python-2-Code wird dabei als dateiname.py.bak gesichert. Wenn 2to3 mit dem Schalter -w und unserem oben dargestellten Beispielquellcode gefüttert wird, sieht der konvertierte Code hinterher so aus:

def getInput(n):
liste = []
for i in range(n):
try:
z = int(eval(input("Bitte eine Zahl eingeben: ")))
except Exception as e:
raise ValueError("Das ist keine Zahl!")
liste.append(z)
return liste
try:
res = getInput(5)
print(res)
except ValueError as e:
print(e.args[0])

Sie sehen, dass die eingangs angesprochenen Stellen geändert wurden, und werden feststellen, dass der übersetzte Code unter Python 3 lauffähig ist.

Anstelle einer einzelnen Programmdatei können Sie dem 2to3-Skript auch eine Liste von Dateien oder Ordnern übergeben. Wenn Sie einen Ordner übergeben haben, wird jede Quelldatei in ihm oder einem seiner Unterordner konvertiert.

Zum Schluss möchten wir noch auf die wichtigsten Kommandozeilenschalter zu sprechen kommen, mit deren Hilfe Sie das Verhalten von 2to3 an Ihre Bedürfnisse anpassen können:

Schalter Alternativ Beschreibung
-d --doctests_only Ist dieser Schalter gesetzt, werden ausschließlich die in der angegebenen Quelldatei enthaltenen Doctests nach Python 3 konvertiert. Standardmäßig werden Doctests nicht angerührt. Näheres über Doctests erfahren Sie in Abschnitt 35.4.1.
-f FIX --fix=FIX Mit dieser Option geben Sie vor, welche sogenannten Fixes angewandt werden sollen. Bei einem Fix handelt es sich um eine bestimmte Ersetzungsregel, beispielsweise das Ersetzen von xrange durch range.
-x NOFIX --nofix=NOFIX Das Gegenstück zu -f. Hier bestimmen Sie, welche Fixes nicht angewandt werden dürfen.
-l --list-fixes Durch Setzen dieses Schalters erhalten Sie eine Liste aller verfügbaren Fixes.
-p --print-function Wenn dieser Schalter gesetzt ist, werden print-Anweisungen nicht konvertiert. Das ist nützlich, wenn Sie print bereits in Python 2.6 wie eine Funktion geschrieben oder den entsprechenden Future Import print_function eingebunden haben.
Das Programm 2to3 kann nicht von selbst entscheiden, ob es eine print-Anweisung mit Klammern versehen muss oder nicht.
-w --write Ist dieser Schalter gesetzt, werden die Änderungen direkt in die untersuchte Quelldatei geschrieben. Ein Backup wird unter dateiname.py.bak angelegt.
-n --nobackups Wenn dieser Schalter gesetzt ist, wird auf das Anlegen der Backup-Datei verzichtet.

Tabelle 43.11    Kommandozeilenoptionen von 2to3

 


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Python 3 Python 3
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: Einstieg in Python
Einstieg in Python


Zum Rheinwerk-Shop: Python. Der Grundkurs
Python. Der Grundkurs


Zum Rheinwerk-Shop: Algorithmen mit Python
Algorithmen mit Python


Zum Rheinwerk-Shop: Objektorientierte Programmierung
Objektorientierte Programmierung


Zum Rheinwerk-Shop: Raspberry Pi. Das umfassende Handbuch
Raspberry Pi. Das umfassende Handbuch


Zum Rheinwerk-Shop: Roboter-Autos mit dem Raspberry Pi
Roboter-Autos mit dem Raspberry Pi


Zum Rheinwerk-Shop: Neuronale Netze programmieren mit Python
Neuronale Netze programmieren mit Python


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2020
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 
[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern