检查函数是否被调用

时间:2017-07-06 18:14:53

标签: python

我想检查是否在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>

有没有更好的方法来实现相同的结果?

2 个答案:

答案 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!")