Я использую декоратор функций в некоторых модульных тестах, которые пишу для тестирования кода.Однако я выяснил, что этот декоратор вызывает функцию, которая вызывается дважды (и, следовательно, выводит ее вывод дважды).
Я обнаружил эту ошибку после того, как некоторые функции возвращали ошибочные возвращаемые значения, которые произошли бы, только если функция была вызвана дважды.
#!/usr/bin/env python3
def decorate(func):
@wraps(func)
def inner(*args, **kwargs):
print("#" * 40)
print("Testing function {}".format(func.__name__))
print("Arguments passed: {} ".format(args))
print("Begin output of {}".format(func.__name__))
print("#" * 40)
try:
func(*args, **kwargs)
except Exception as e:
print("Error occured: {}".format(e))
print("#" * 40)
print("End of output of {}".format(func.__name__))
print("#" * 40)
print("\n" * 5)
return func(*args,**kwargs) #Error happens on this line here
return inner
#Add decorator to function definition.
@decorate
def asdf():
print("THIS SHOULD PRINT ONCE")
#Call function
asdf()
Вывод (интервал в точности копируется):
########################################
Testing function asdf
Arguments passed: ()
Begin output of asdf
########################################
THIS SHOULD PRINT ONCE
########################################
End of output of asdf
########################################
THIS SHOULD PRINT ONCE
Мой желаемый вывод:
########################################
Testing function asdf
Arguments passed: ()
Begin output of asdf
########################################
THIS SHOULD PRINT ONCE
########################################
End of output of asdf
########################################
Я пытаюсь устранить второй вызов функции,Я знаю, что моя ошибка лежит в декораторе, я просто не могу ее найти.