2017-07-06 72 views
2

我想检查一个函数是否在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变量。

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

+0

https://stackoverflow.com/questions/9882280/find-out-if-a-function-has-been-called – Dadep

+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

没事做,你做什么如果。你这样做的时候,你可以写这样的装饰:

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