You need to enable JavaScript to run this app. Python Lambda返回非JSON异常对象作为响应的报错问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Python Lambda返回非JSON异常对象作为响应的报错问题咨询

问题根因

Python原生的json模块默认仅支持序列化字符串、数值、列表、字典、布尔值、None等基础类型,异常类的实例不属于可直接序列化的类型,因此直接对ex执行json.dumps()会抛出类型错误;而直接将异常对象作为body返回也不符合Lambda响应格式要求(body需为字符串类型)。

可行解决方案

方案1:仅返回异常提示信息(最简单)

将异常对象转为字符串后再序列化,可直接获取异常的核心提示内容:

import json

def handler(event, context):
    try:
        project = event['environment']
    except Exception as ex:
        return {
            'statusCode': 500,
            'body': json.dumps({"error": str(ex)})
        }

方案2:返回完整异常堆栈信息(适合调试场景)

如果需要保留完整的错误栈方便排查问题,可以使用traceback模块捕获堆栈信息后序列化:

import json
import traceback

def handler(event, context):
    try:
        project = event['environment']
    except Exception as ex:
        return {
            'statusCode': 500,
            'body': json.dumps({
                "error_type": type(ex).__name__,
                "error_msg": str(ex),
                "stack_trace": traceback.format_exc()
            })
        }

方案3:自定义JSON编码器(适配通用序列化场景)

如果有大量需要序列化异常对象的场景,可以自定义JSON编码器统一处理异常类型:

import json
from json import JSONEncoder

class ExceptionEncoder(JSONEncoder):
    def default(self, o):
        if isinstance(o, Exception):
            return {
                "error_type": type(o).__name__,
                "error_msg": str(o)
            }
        return super().default(o)

def handler(event, context):
    try:
        project = event['environment']
    except Exception as ex:
        return {
            'statusCode': 500,
            'body': json.dumps(ex, cls=ExceptionEncoder)
        }

内容的提问来源于stack exchange,提问作者pkaramol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 00:36:07