2017-08-21 18 views
1

Pythonバージョン> = 3と仮定し、関数のリストを呼び出します。 例外を処理するラムダ関数を記述したいと思います。 それは機能しません。機能に例外がスローされた場合、プログラムは戻り、呼び出しスタックにexecuteFunctionが表示されません。Python lambdaを使用して例外をキャッチする方法

どうすればよいですか?例外は関数呼び出しのいずれかによって提起された場合、引数がまだ評価されている間に

def executeFunction(x): 
    try: 
     x 
    except: 
     print('Exception caught') 


executeFunction(func1()) 
executeFunction(func2()) 
executeFunction(func3()) 
executeFunction(func4()) 
executeFunction(func5()) 
executeFunction(func6()) 

答えて

7

executeFunctionは、つまり、呼び出されません。

def executeFunction(x): 
    try: 
     x() 
    except SomeException: 
     print('Exception caught') 

executeFunction(func1) 

x()から発生したエラーは、現在囲むtry/except句によって処理されます。あなたが代わりに呼び出し可能を渡すとtry/except句の内部でそれを呼び出すことを検討してください

ます。また、関数への呼び出しを使用するためのPythonのデコレータ構文を悪用する可能性が自ら直接にせず:あなたは、引数を使用してコールを延期するfunctools.partial(またはlambda)を使用することができます引数を持つ関数の場合

発信者の側からよりクリーンなコードを与える直接明示的コールexecuteFunction、:引数を持つ関数の場合

def executeFunction(func): 
    def wrapper(*args, **kwargs): 
     try: 
      func(*args, **kwargs) 
     except SomeException: 
      print('Exception caught') 
    return wrapper 

@executeFunction 
def func1(arg1, arg2): 
    ... 
@executeFunction 
def func2(arg1): 
    ... 


func1(arg1, arg2) # -> executeFunction(func1)(arg1, arg2) 
func2(arg1)  # -> executeFunction(func2)(arg1) 
+0

、私を追加する方法があります(arg1、arg2) elif arg1!= "" arg3!= ""とarg2!= ""の場合: def executeFunction(x、arg1 = ""、arg2 = ""): : x(arg1) else: x() を除く: print( '例外が見つかりました' + x .__ name__) – Rems

+0

@Rems回答を更新しました。 –

+0

ありがとうございます! – Rems

関連する問題