检查函数是否被调用

Fáb*_*rez 2 python

我想检查是否在Python脚本中调用了一个函数.

我目前的解决方案如下:

def _print_error(msg):
    print(msg)
    print("Default error message.")
    _print_error.was_called = True


_print_error.was_called = False
Run Code Online (Sandbox Code Playgroud)

我可以_print_error通过检查来检查是否被调用_print_error.was_called.

另一种可能的方法是设置一个类并定义一个静态变量,只要该类被实例化,该变量就会被更改.__init__可以打印消息并更改was_called变量.

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

Mar*_*ers 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
Run Code Online (Sandbox Code Playgroud)

请注意,我只在调用成功完成时设置标志(例如,如果引发异常,则不设置标志).您可以交换订单(return func(*args, **kwargs)如果您想要设置标志,即使引发了异常,也可以直接交换).

只需将其应用于该功能:

@flag_when_called
def _print_error(msg):
    print(msg)
    print("Default error message.")
Run Code Online (Sandbox Code Playgroud)