Menü
Developer

Programmiersprachen: Python 3.7 bekommt eine breakpoint-Methode

Die in der ersten Beta des kommenden Python-Release integrierte Funktion bietet eine konsistente Schnittstelle zum Debugger. Außerdem setzt die Sprache nun auf UTF-8 und ermittelt die Zeit mit einer Auflösung von Nanosekunden.

Von
vorlesen Drucken Kommentare lesen 72 Beiträge
Python 3.7 bekommt eine breakpoint-Methode

Das Python-Team hat das erste Beta-Release von Python 3.7 veröffentlicht. Damit gilt die kommende Version der Programmiersprache als Feature Complete, aber einige der neuen Funktionen können sich im Verlauf der geplanten weiteren drei Beta-Veröffentlichungen noch leicht ändern oder doch entfallen, was jedoch laut der offiziellen Ankündigung unwahrscheinlich ist. Das GA-Release (General Availability) von Python 3.7 soll planmäßig am 15. Juni 2018 erscheinen. Das Release bringt wenige große Neuerungen innerhalb der APIs, aber einige Ergänzungen, die vor allem eine bessere Konsistenz über verschiedene Plattformen bieten.

Die vielleicht augenscheinlichste Neuerung für Entwickler ist die in PEP 553 (Python Enhancement Proposal) beschriebene integrierte breakpoint()-Methode. Sie bietet einen konsistenten Weg, den eingestellten Debugger zu nutzen und ruft ihrerseits die Funktion sys.breakpointhook() auf, die standardmäßig pdb importiert und pdb.set_trace() aufruft. Entwickler können jedoch den verwendeten Debugger entweder über die Umgebungsvariable PYTHONBREAKPOINT steuern oder die Methode sys.breakpointhook() an eine andere Funktion binden. Sie können die breakpoint()-Aufrufe deaktivieren, indem sie der Umgebungsvariable den Wert 0 zuweisen.

Saubere Cross-Plattform-Ansätze bei Threads und Zeichenkodierung

PEP 539 führt die Thread-Specific-Storage-API (TSS) für CPython ein, die die vorhandene Thread-Local-Storage-API (TLS) ersetzt. Hintergrund ist, dass Letztere, die nun als überholt (deprecated) gilt, den Datentyp int zum Verwalten der Thread-Keys verwendet. Das ist auf den meisten Plattformen wohl kein Problem, aber weder POSIX-konform noch portabel. TSS führt dagegen den neuen Datentyp Py_tss_t ein.

Eine weitere Neuerung betrifft die Kodierung für Zeichen, die nun laut PEP 538 standardmäßig UTF-8 ist. Sowohl der Interpreter als auch auf die Kodierung angewiesene C-Extensions wie readline, setzen nun UTF-8 statt 7-bit ASCII voraus. Entwickler können die neue Umgebungsvariable PYTHONCOERCECLOCALE auf 0 setzen, um den Wechsel auf UTF-8 zu umgehen. Setzen sie ihn auf den Wert warn, gibt Python Warnungen auf stderr aus, die das Umschalten der Kodierung betreffen.

Genauere Zeitmessung

Python 3.7 misst die Zeit neuerdings dank dem PEP 564 in Nanosekunden. Dazu hat das Team die vorhandene time-API um neue Funktionen erweitert, die konsequenterweise alle den Anhang _ns für Nanosekunde haben.

Auch zahlreiche Module haben Ergänzungen bekommen, so lassen sich in argparse nun über parse_intermixed_args() für die meisten Funktionen die Argumente und Optionen beliebig mischen, und das crypt-Modul kann den Verschlüsselungsalgorithmus Blowfish verwenden. Das Modul importlib.resources ist neu und bietet APIs zum Zugriff auf Ressourcen innerhalb von Paketen.

Weitere Neuerungen, die unter anderem den Umgang mit Annotations und den anpassbaren Zugriff auf Attribute innerhalb von Modulen betreffen, lassen sich der offiziellen Übersicht zu den Neuerungen in Python 3.7 entnehmen. (rme)