Контекстные менеджеры являются хорошим инструментом для управления файлами, сетевыми соединениями и другими объектами, мы разберем простейшие способы их использования.
1. Стандартный пример с with: позволяет безопасно открыть и закрыть файл, даже если в блоке возникнет ошибка:
with open('file.txt', 'r') as file:
data = file.read()
2. Создание своего контекстного менеджера: определив enter и exit методы. Это полезно, например, для измерения времени выполнения:
class Timer:
def __enter__(self):
self.start = time.time()
def __exit__(self, exc_type, exc_value, traceback):
print(f"Время выполнения: {time.time() - self.start:.4f} сек")
3. Использование contextmanager: модуль contextlib позволяет создавать контекстные менеджеры проще, например, для работы с файлами:
@contextmanager
def open_file(path, mode):
file = open(path, mode)
try:
yield file
finally:
file.close()