-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLesson_8_dz.py
More file actions
70 lines (57 loc) · 2.18 KB
/
Copy pathLesson_8_dz.py
File metadata and controls
70 lines (57 loc) · 2.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
"""
Задание 1.
Реализуйте логгирование в файл и в поток для любой из задач используя продвинутое логгирование
"""
import logging
import sys
# Настройка логгера
logger = logging.getLogger('advanced_logger')
logger.setLevel(logging.DEBUG)
# Форматтер для логов
formatter = logging.Formatter('%(asctime)s %(levelname)s [%(name)s] %(funcName)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
# Файловый обработчик (DEBUG и выше)
file_handler = logging.FileHandler('advanced.log', encoding='utf-8')
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)
# Консольный обработчик (INFO и выше)
stream_handler = logging.StreamHandler(sys.stdout)
stream_handler.setLevel(logging.INFO)
stream_handler.setFormatter(formatter)
# Добавляем обработчики к логгеру
logger.addHandler(file_handler)
logger.addHandler(stream_handler)
def divide(a, b):
"""
Делит a на b, логирует результат и ошибки.
"""
try:
result = a / b
logger.info(f"divide({a}, {b}) = {result}")
return result
except ZeroDivisionError as e:
logger.error(f"divide({a}, {b}) - ошибка: {e}")
return None
def compute_factorial(n):
"""
Вычисляет факториал n рекурсивно, логируя начало и конец функции.
"""
logger.debug(f"Вход в compute_factorial: n={n}")
if n < 0:
logger.error(f"Неверный аргумент для factorial: {n}")
raise ValueError("n must be >= 0")
if n in (0, 1):
logger.debug(f"Базовый случай factorial: n={n}")
return 1
result = n * compute_factorial(n - 1)
logger.debug(f"compute_factorial({n}) = {result}")
return result
if __name__ == '__main__':
# Примеры использования
divide(10, 2)
divide(5, 0)
logger.info(f"Factorial of 5: {compute_factorial(5)}")
try:
compute_factorial(-1)
except ValueError:
pass