Alternatywa dla contextlib.nested ze zmienną liczbą menedżerów kontekstu
Mamy kod, który wywołuje zmienną liczbę menedżerów kontekstu w zależności od parametrów środowiska wykonawczego:
from contextlib import nested, contextmanager
@contextmanager
def my_context(arg):
print("entering", arg)
try:
yield arg
finally:
print("exiting", arg)
def my_fn(items):
with nested(*(my_context(arg) for arg in items)) as managers:
print("processing under", managers)
my_fn(range(3))
Jednak,contextlib.nested
jest przestarzały od wersji Pythona 2.7:
DeprecationWarning: With-statements now directly support multiple context managers
Odpowiedzi naWiele zmiennych w instrukcji Pythona „z” wskaż tocontextlib.nested
ma kilka „mylących dziwactw podatnych na błędy”, ale sugerowana alternatywa korzystania z wielu menedżerówwith
instrukcja nie będzie działać dla zmiennej liczby menedżerów kontekstu (a także łamie kompatybilność wsteczną).
Czy są jakieś alternatywycontextlib.nested
które nie są przestarzałe i (najlepiej) nie mają tych samych błędów?
Czy powinienem nadal używaćcontextlib.nested
i zignorować ostrzeżenie? Jeśli tak, to powinienem zaplanowaćcontextlib.nested
usunąć w przyszłości?