Что нужно сделать
Реализуйте декоратор logging
, который будет отвечать за логирование функций. На экран выводится название функции и её документация. Если во время выполнения декорируемой функции возникла ошибка, то в файл function_errors.log
записываются названия функции и ошибки.
Также постарайтесь сделать так, чтобы программа не завершалась после обнаружения первой же ошибки, а обрабатывала все декорируемые функции и сразу записывала все ошибки в файл.
Дополнительно: запишите дату и время возникновения ошибки, используя модуль datetime
.
Что оценивается
- Результат вычислений корректен.
- Сообщения о процессе получения результата осмыслены и понятны для пользователя.
- Переменные, функции и собственные методы классов имеют значащие имена (не
a
,b
,c
,d
). - Классы и методы/функции имеют прописанную документацию.
- Есть аннотация типов для методов/функций и их аргументов (кроме
args
иkwargs
). Если функция/метод ничего не возвращает, то используетсяNone
. - Во всех декораторах используется
functools.wraps
.
import datetime
def logging(func):
"""Декоратор выводит имя, документацию функций, и записывает ошибки в файл."""
def inner(*args, **kwargs):
try:
print('Имя функции: ', func.__name__)
print('Документация: ', func.__doc__)
result = func(*args, **kwargs)
return result
except Exception as exception:
with open('function_errors.log', 'a', encoding='UTF-8') as logfile:
logfile.writelines(f'''Дата/время: {datetime.datetime.now()}
Функция: "{func.__name__}"
Ошибка: "{exception}"
\n''')
return inner
@logging
def test1():
"""Документация"""
print('Функция выполнена.')
@logging
def test2():
#Документация
print(Zzzzzzzzzzzz)
@logging
def test3():
print('Функция выполнена.')
@logging
def test4():
"""Документация"""
print(Zzzzz)
test1()
test2()
test3()
test4()