0Pricing
Python Academy · Lektion

Die with-Anweisung im Detail

Verstehen Sie, wie with funktioniert und warum es Ressourcenlecks verhindert.

Die with-Anweisung im Detail ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Python Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Einführung

Die with-Anweisung garantiert, dass Code für Einrichtung und Aufräumen ausgeführt wird, auch wenn Ausnahmen auftreten.

Grundlegende Verwendung von with

with expr as var: – expr muss einen Context Manager zurückgeben. var wird an den Rückgabewert von __enter__ gebunden.
with open('/tmp/cm_test.txt','w') as f:
    f.write('hello')
print('file closed:', f.closed)

Warum with existiert

Ressourcen wie Dateien, Sperren und Datenbankverbindungen müssen freigegeben werden. with garantiert die Bereinigung, selbst wenn eine Ausnahme den Block unterbricht.
# Without with:
# f = open('f.txt')
# try: ...
# finally: f.close()
# With with:
# with open('f.txt') as f: ...
print('with is cleaner')

Mehrere Context Manager

with open(a) as f, open(b) as g: öffnet zwei Ressourcen in einer Anweisung. Beide werden beim Verlassen geschlossen.
import tempfile, os
a = tempfile.mktemp(); b = tempfile.mktemp()
with open(a,'w') as fa, open(b,'w') as fb:
    fa.write('A'); fb.write('B')
os.unlink(a); os.unlink(b)
print('both closed')

with unterdrückt keine Ausnahmen

Standardmäßig werden Ausnahmen im with-Block weitergegeben. __exit__ kann sie unterdrücken, indem es True zurückgibt.
try:
    with open('/nonexistent.txt') as f:
        pass
except FileNotFoundError as e:
    print('caught:', e)

Lock als Context Manager

threading.Lock() funktioniert als Context Manager: with lock: stellt sicher, dass die Sperre immer freigegeben wird.
import threading
lock = threading.Lock()
with lock:
    print('locked section')
print('lock released')

Muster für Datenbankverbindungen

Eine DB-Verbindung als Context Manager führt bei Erfolg ein Commit aus und bei einer Ausnahme ein Rollback – ein wichtiges Muster.
# Typical DB pattern:
# with db.transaction() as conn:
#     conn.execute(sql)
# commits on success, rolls back on exception
print('db pattern demo')

Verschachtelte with-Anweisungen

Verschachtelte with-Anweisungen sind problemlos möglich. Der innere Context Manager wird zuerst verlassen, danach der äußere.
import tempfile
tmp = tempfile.mktemp()
with open(tmp,'w') as outer:
    with open(tmp,'r+') as inner:
        outer.write('x')
import os; os.unlink(tmp)
print('nested exit order')

contextlib.suppress

contextlib.suppress(ExcType) unterdrückt innerhalb des with-Blocks stillschweigend einen bestimmten Ausnahmetyp.
from contextlib import suppress
with suppress(FileNotFoundError):
    open('/does/not/exist.txt')
print('no error raised')

contextlib.redirect_stdout

contextlib.redirect_stdout(f) leitet die Ausgabe von print() vorübergehend nach f um.
from contextlib import redirect_stdout
import io
buf = io.StringIO()
with redirect_stdout(buf):
    print('captured')
print('got:', buf.getvalue())

ExitStack

contextlib.ExitStack verwaltet eine dynamische Anzahl von Context Managern – nützlich, wenn Sie nicht wissen, wie viele Dateien Sie öffnen müssen.
from contextlib import ExitStack
import tempfile, os
with ExitStack() as stack:
    files = [stack.enter_context(open(tempfile.mktemp(),'w')) for _ in range(3)]
    for f in files: f.write('x')
print('all closed')

Kurzer Test

Was bewirkt contextlib.suppress(FileNotFoundError)?

Zusammenfassung

with garantiert die Bereinigung. Mehrere Ziele in einem with. contextlib.suppress unterdrückt bestimmte Fehler. ExitStack verwaltet eine dynamische Anzahl von Context Managern.

Weiter so

Gute Arbeit! Die nächste Lektion wartet bereits auf Sie.

Häufig gestellte Fragen

Ist die Lektion „Die with-Anweisung im Detail“ kostenlos?

Ja — der vollständige Text von „Die with-Anweisung im Detail“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Python Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Die with-Anweisung im Detail“?

Verstehen Sie, wie with funktioniert und warum es Ressourcenlecks verhindert. Du übst Python Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Python Academy zu starten?

Keine Vorkenntnisse erforderlich. Python Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Die with-Anweisung im Detail“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Python Academy-Lektion Code schreiben und ausführen?

Ja. Jede Python Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Die with-Anweisung im Detail
  2. Das __enter__- und __exit__-Protokoll
  3. contextlib: @contextmanager
  4. Praxisnahe Muster für Kontextmanager
← Zurück zu Python Academy