2017-07-06 15 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!") 
関連する問題