You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用lambda给request_body赋值及JSON序列化报错问题咨询

问题原因

这个赋值方式是错误的。lambda 本质是匿名函数,你直接把 lambda 表达式赋值给 request_body["name"],最终存到字典里的是函数对象本身,而不是你预期的字符串结果。调用API时框架会把请求体序列化为JSON,JSON不支持函数类型,所以抛出了对应的TypeError。

另外你写的lambda还存在参数冲突问题:外层函数的形参也叫name,lambda又自定义了同名形参,就算你后续调用lambda也会触发变量作用域的逻辑隐患。

正确写法

你不需要用到lambda,直接用三元表达式赋值即可:

def make_api_call(context, name, ...):
    api_name = f"<my_API_Call_URL_here>"
    request_body= {}
    # 直接用三元表达式得到字符串结果赋值
    request_body["name"] = "" if name == "BLANK" else name
    ...
    context.base.execution_call(context, api_name, request_body, "post")

如果你确实要使用lambda(该场景属于冗余使用,不推荐),必须补充调用逻辑,同时修改lambda参数避免和外层变量重名:

# 调用lambda时把外层name作为参数传入,拿到返回的字符串结果再赋值
request_body["name"] = (lambda val: "" if val == "BLANK" else val)(name)
注意事项
  • 三元表达式已经完全覆盖该简单条件赋值场景,可读性和性能都优于多余的lambda调用
  • 所有放入API请求体的字段,都必须是JSON支持的基础类型(字符串、数字、布尔、列表、字典、None),不能传入函数、类实例等特殊类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:15:03