Python遍历函数列表执行的Try/except异常捕获代码修复问题
问题根源
你的代码存在两个核心错误:
- 定义
list_functions = [func1(var), func2(var)]时就已经立即执行了两个函数,还没进入循环就会触发func1的报错,根本不会走到后续的遍历逻辑 - 循环内的
try块里只写了function,没有加括号执行函数调用,就算前面列表定义没有问题,这里也不会真的运行目标函数
修复方案
方案1:所有函数参数统一的场景
如果每个要执行的函数都只需要传入同一个var参数,可以直接把函数对象存入列表,循环时再调用:
# 仅存储函数对象本身,不要加括号提前调用 list_functions = [func1, func2] for function in list_functions: try: # 循环内再执行函数调用 function(var) except Exception: # 建议不要使用裸except,指定捕获的异常类型更安全 pass else: break else: raise Exception("No function succeeded.")
方案2:函数参数不统一的场景
如果不同函数需要传入不同参数,可以把函数和对应参数打包存入列表:
# 存储结构为(函数对象, 位置参数元组, 关键字参数字典) list_functions = [ (func1, (var1, var2), {"a": 1}), (func2, (var,), {}), (func3, tuple(), {"x": 2, "y": 3}) ] for func, args, kwargs in list_functions: try: func(*args, **kwargs) except Exception: pass else: break else: raise Exception("No function succeeded.")
内容的提问来源于stack exchange,提问作者vojtam
相关产品推荐
相关产品推荐

