Python 检查是否调用了函数

Python 检查是否调用了函数,python,Python,我想检查Python脚本中是否调用了函数 我目前的解决方案如下: def _print_error(msg): print(msg) print("Default error message.") _print_error.was_called = True _print_error.was_called = False 我可以通过检查\u print\u error.was\u called来检查是否调用了\u print\u error 另一种可能的方法是设置一

我想检查Python脚本中是否调用了函数

我目前的解决方案如下:

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


_print_error.was_called = False
我可以通过检查
\u print\u error.was\u called
来检查是否调用了
\u print\u error

另一种可能的方法是设置一个类并定义一个静态变量,该变量在类实例化时会更改。
\uuuu init\uuuu
可以打印消息并更改
被称为
变量


有没有更好的方法可以达到同样的效果?

使用装饰器设置标志:

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.")

做你所做的没关系。如果你经常这样做,你可以为此写一个装饰师:

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

谢谢。这回答了我的问题。我将关闭它。