Контекстный менеджер для логирования ошибок
Python
Middle
Яндекс
01.01.2025
Реализуйте контекстный менеджер `ErrorLogger`, который принимает путь к лог-файлу.
При выходе из блока `with` он должен:
1. Если исключения не произошло — ничего не делать.
2. Если произошло исключение — записать текст исключения в файл и **проглотить** его (не пробрасывать дальше).
**Пример:**
```python
with ErrorLogger("errors.log"):
1 / 0
# программа не падает, а запись об ошибке появляется в файле
```
Ответы
Решение 1
```python
import traceback
class ErrorLogger:
def __init__(self, path: str):
self.path = path
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
if exc_type is None:
return False # всё ок, ничего не делаем
# пишем стек в файл
with open(self.path, "a", encoding="utf-8") as f:
f.write("".join(traceback.format_exception(exc_type, exc_val, exc_tb)))
f.write("\n")
return True # исключение обработано, гасим его
```