假设 Python 版本 >=3 并调用函数列表。
我想编写一个处理异常的 lambda 函数。
问题是,它不起作用,当函数中抛出异常时,程序返回并且调用堆栈看不到其中的 executeFunction
。
怎么做?
def executeFunction(x):
try:
x
except:
print('Exception caught')
executeFunction(func1())
executeFunction(func2())
executeFunction(func3())
executeFunction(func4())
executeFunction(func5())
executeFunction(func6())
最佳答案
如果任何函数调用引发异常,则不会调用
executeFunction
,也就是说,当参数仍在计算时。
您应该考虑传递 callable 并在 try/except
子句中调用它:
def executeFunction(x):
try:
x()
except SomeException:
print('Exception caught')
executeFunction(func1)
x()
引发的任何错误现在都由封闭的 try/except
子句处理。
对于带参数的函数,您可以使用 functools.partial
(或 lambda
)使用参数延迟调用:
from functools import partial
def executeFunction(x):
try:
x()
except SomeException:
print('Exception caught')
executeFunction(partial(func1, arg1, argn))
# executeFunction(lambda: func1(arg1, argn))
您还可以利用 Python 的装饰器语法直接使用对函数本身的调用,而不必显式直接调用 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)
关于python - 如何使用 python lambdas 捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45803245/