декоратор - запуск функции
Мне нужно написать декоратор, который последовательно запускает функции (указаны ниже), выдает ошибку RunTimeerror если все функции завершились с ошибкой. Не могу понять в чем проблема,
def call_rectifier(func1, func2, func3, func4):
def inner():
try:
func1()
except:
try:
func2()
except:
try:
func3()
except:
try:
func4()
except: print ("Runtime error")
return inner
def f1():
return 1
def f1_2():
raise Exception
def f2():
return 2
def f3():
return 1
def f4():
return 1
При банальной проверке выдает ошибку
wrapper = call_rectifier(f1, f2, f3, f4)
assert wrapper() == 1
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Так надо же return поставить перед вызовом каждой из функций внутри inner, иначе при вызове inner вернётся None, что у вас и происходит:
def call_rectifier(func1, func2, func3, func4):
def inner():
try:
return func1()
^^^^^^
...
А вообще всё это можно гораздо короче написать, без повторения кода, если использовать список функций:
def call_rectifier(funcs):
def inner():
for f in funcs:
try:
return f()
except:
pass
print ("Runtime error")
return inner
...
wrapper = call_rectifier([f1_2, f1, f3, f4])