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
相关产品推荐
相关产品推荐

