如何将函数执行的所有结果(含错误)追加到列表中
如何将函数执行的所有结果(含错误)追加到列表中
这个需求在日常开发里挺常见的,咱们可以用Python的try-except语句完美解决,既能捕获你指定的错误类型,又能把正常结果和错误信息都收集到目标列表里。我给你一步步拆解实现方式:
基础实现方案
首先,咱们要明确需要捕获的错误类型(比如你提到的JSONDecodeError、IndexError),然后在循环里用try包裹函数调用,遇到指定错误时就把错误信息追加到列表里。
举个完整的代码例子:
# 注意:JSONDecodeError需要从json模块导入,像IndexError这类内置错误不用额外导入 from json import JSONDecodeError # 初始化结果列表 result_list = [] # 你的输入值列表 values_list = [2, '{"name": "test"}', '[1,2,3]', "invalid_json_string", [1,2]] # 示例函数,模拟可能抛出错误的场景 def func(value): if isinstance(value, str): import json return json.loads(value) # 这里可能抛出JSONDecodeError elif isinstance(value, list): return value[5] # 这里可能抛出IndexError else: return value * 2 # 遍历输入列表,收集结果和错误 for value in values_list: try: # 尝试执行函数,获取正常结果 normal_result = func(value) result_list.append(normal_result) except (JSONDecodeError, IndexError) as err: # 捕获指定的错误,把错误对象或格式化信息追加到列表 # 如果你只想存错误对象,直接append(err)就行;想存更友好的信息就格式化 result_list.append(f"{type(err).__name__}: {str(err)}")
进阶优化:区分输入、结果和错误
如果后续需要更清晰地追踪每个输入对应的情况,建议把结果存成字典格式,这样能明确区分输入值、正常输出和错误信息,调试起来更方便:
for value in values_list: try: output = func(value) result_list.append({ "input_value": value, "result": output, "error": None }) except (JSONDecodeError, IndexError) as err: result_list.append({ "input_value": value, "result": None, "error": f"{type(err).__name__}: {str(err)}" })
注意事项
- 尽量明确指定要捕获的错误类型,不要直接用
except Exception:(除非你确实需要捕获所有可能的错误),因为这样会意外捕获一些你不想处理的错误(比如KeyboardInterrupt),不利于排查问题; - 如果你的函数可能抛出更多类型的错误,只需要把对应的错误类加入
except后面的元组里就行,比如except (JSONDecodeError, IndexError, KeyError) as err:。
备注:内容来源于stack exchange,提问作者french_fries
相关产品推荐
相关产品推荐

