2017-07-06 157 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!")