← До фільтрів та технологій

← До списку лабораторних по Python

Python Лабораторна 22: Безпечна робота з ресурсами через with

Технологія: Python

Номер лабораторної: 22 · Рівень: middle

Тема: Контекстні менеджери і with

Повний опис / сценарій лабораторної:

Meta: навчитися закривати файли, зʼєднання та інші ресурси через конструкцію with та власні контекстні менеджери.



Krok 1. Створити файл src/app/context22.py.

Komandi: cd ~/python_lab1/src; touch app/context22.py



Krok 2. Додати приклад використання with для файлу.

Komanda: printf "from pathlib import Path

def write_file(path: str, text: str) -> None:
    p = Path(path)
    with p.open("w", encoding="utf8") as f:
        f.write(text)

if __name__ == "__main__":
    write_file("ctx22.txt", "hello")
" > app/context22.py



Krok 3. Запустити модуль і перевірити що файл створений.

Komandi: export PYTHONPATH=$(pwd); python app/context22.py; ls ctx22.txt



Krok 4. Навмисно згенерувати помилку всередині блоку with і переконатися що файл все одно закривається.

Poyasnennya: додай виклик 1 / 0 всередині блоку і запусти.



Krok 5. Створити власний клас контекстного менеджера з методами enter та exit.

Poyasnennya: наприклад клас Timer який міряє час виконання.



Krok 6. Використати цей клас у конструкції with в окремій функції.

Poyasnennya: всередині with виконай повільну операцію і виведи час.



Krok 7. Створити контекстний менеджер через декоратор contextmanager з модуля contextlib.

Poyasnennya: наприклад менеджер який тимчасово змінює поточний каталог.



Krok 8. Порівняти код на класі і через contextmanager за обсягом і читабельністю.



Krok 9. Занотувати де в реальних сервісах можна застосовувати контекстні менеджери, наприклад для транзакцій у базі.



Krok 10. Mini zvit.

Zavdannya: опиши коли варто робити власний контекстний менеджер замість простих try finally.