我想检查是否在Python脚本中调用了一个函数。
我目前的解决方案如下:
def _print_error(msg):
print(msg)
print("Default error message.")
_print_error.was_called = True
_print_error.was_called = False
我可以通过查看_print_error
来检查是否调用_print_error.was_called
。
另一种可行的方法是设置一个类并定义一个静态变量,只要该类被实例化,该变量就会被更改。__init__
可以打印消息并更改was_called
变量。 / p>
有没有更好的方法来实现相同的结果?
答案 0 :(得分:8)
使用装饰器设置标志:
from functools import wraps
def flag_when_called(func):
func.was_called = False
@wraps(func)
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
func.was_called = True
return result
return wrapper
请注意,我只在呼叫成功完成时设置了标志(例如,如果引发异常,则标志不设置)。您可以交换订单(如果要设置标志,即使引发了异常,也可以直接return func(*args, **kwargs)
。
只需将其应用于该功能:
@flag_when_called
def _print_error(msg):
print(msg)
print("Default error message.")
答案 1 :(得分:1)
你可以做你做的事。如果你经常这样做,你可以写一个装饰器:
import functools
def trackcalls(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
wrapper.was_called = True
return func(*args, **kwargs)
wrapper.was_called = False
return wrapper
@trackcalls
def _print_error(msg):
print(msg)
print("Default error message.")
_print_error()
# and then check it:
if _print_error.was_called:
print("Alarm!")