Ich möchte etwas wie folgt aus:Wie mache ich einen Contextmanager mit einer Schleife innerhalb?
from contextlib import contextmanager
@contextmanager
def loop(seq):
for i in seq:
try:
do_setup(i)
yield # with body executes here
do_cleanup(i)
except CustomError as e:
print(e)
with loop([1,2,3]):
do_something_else()
do_whatever()
Aber contextmanager funktioniert nicht, weil es der Generator genau einmal erhalten erwartet.
Der Grund, warum ich das will, ist, weil ich im Grunde meinen eigenen Brauch für Schleife machen möchte. Ich habe eine modifizierte IPython, die verwendet wird, um Testgeräte zu steuern. Es ist offensichtlich eine vollständige Python-REPL, aber meistens ruft der Benutzer nur vordefinierte Funktionen (ähnlich der Bash-Eingabeaufforderung) auf, und es wird nicht erwartet, dass der Benutzer ein Programmierer ist oder mit Python vertraut ist. Es muss eine Möglichkeit geben, bei jeder Iteration willkürlichen Code mit Setup/Bereinigung und Ausnahmebehandlung zu durchlaufen, und es sollte ungefähr so einfach sein wie oben mit Anweisung.
Ich wusste, dass es so etwas einfach wäre. Vielen Dank! – jpkotta