Ein Context Manager ist jedes Objekt mit dunder enter und dunder exit. Das with-Statement ruft enter auf, bindet den Rückgabewert an das as-Ziel und garantiert, dass exit danach läuft, auch wenn der Body eine Exception wirft. Exit bekommt die Exception-Details und kann die Exception unterdrücken, indem es True zurückgibt. Der Decorator contextlib.contextmanager lässt dich dasselbe als Generator mit einem einzigen yield schreiben.
Warum Interviewer das fragen
Ressourcenlecks gehören zu den häufigsten Produktionsfehlern in Python-Services, also prüfen Interviewer, ob du reflexhaft zu with greifst und die Garantie verstehst, die es gibt. Sie wollen auch sehen, dass du einen schreiben und nicht nur benutzen kannst, und dass du weißt, dass exit auch im Fehlerpfad läuft, denn genau das macht es zu einem Aufräummechanismus statt zu bequemer Syntax.
So baust du deine Antwort auf
- Nenn die zwei Dunder-Methoden und ihre Aufgaben.
- Betone, dass exit auch bei Exceptions läuft.
- Erwähn die contextlib-Generator-Abkürzung.
- Beschreib einen, den du geschrieben hast, und das Leck, das er verhindert hat.
Beispielantwort
Das Protokoll besteht aus zwei Methoden. Enter macht das Setup und gibt zurück, was nach dem as-Schlüsselwort gebunden werden soll, und exit macht den Abbau. Wichtig ist, dass exit läuft, egal ob der Block sauber durchgelaufen oder explodiert ist, und es bekommt Exception-Typ, Wert und Traceback, um zu entscheiden, was zu tun ist. True aus exit zurückzugeben schluckt die Exception, was ich sparsam nutze, weil es Fehler versteckt. Die meisten, die ich schreibe, nutzen contextlib.contextmanager, wo der Code vor dem yield das Setup ist, der Code danach der Abbau, und ich wickle das yield in try finally, damit das Aufräumen auch im Fehlerfall passiert. Bei einem Fintech habe ich einen für Datenbanktransaktionen gebaut, der zusätzlich eine Request-ID in den Logging-Kontext gestempelt hat, sodass jede Query im Block nachverfolgbar war und die ID beim Rausgehen gelöscht wurde. Davor haben wir das von Hand gesetzt und gelöscht, und ein frühes return in einem Handler hat die ID in den nächsten Request auf demselben Worker geleakt.
Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.
So funktioniert esNachfragen, mit denen du rechnen solltest
- Wie gehst du mit mehreren Context Managern gleichzeitig um?
- Was löst contextlib.ExitStack?
- Wie würdest du einen async Context Manager schreiben?
Weitere Fragen für Python-Entwickler
Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.
Meine Fragen vorhersagen