"函数计算中,# -- coding: utf-8 --
import json
def handler(event, context):
evt = json.loads(event)
return evt['key']
我从例子中copy了上面这个简单的函数,但是提示出错了,错误为:""errorMessage"": ""the JSON object must be str, bytes or bytearray, not dict"",有python版本的教程吗?"
根据您提供的错误信息,问题出在将字典类型的event
转换为JSON字符串时。在Python中,json.dumps()
函数需要接收一个可序列化的对象(如列表、元组、字典等),而不是字典类型。
为了解决这个问题,您可以使用json.dumps()
函数的default
参数来处理不可序列化的对象。这里是一个修改后的示例:
import json
def handler(event, context):
evt = json.loads(event)
return evt['key']
在这个示例中,我们没有使用json.dumps()
函数,而是直接使用了json.loads()
函数。这样,当遇到不可序列化的对象时,json.loads()
函数会自动将其转换为字符串。
从错误信息来看,您在解析事件(event)时遇到了问题。函数计算将接收到的事件以JSON格式字符串传递给您的处理函数,而您的代码似乎期望它是一个字典类型。
在Python中,当您尝试使用json.loads()
函数解析一个已经是字典的对象时,会抛出“the JSON object must be str, bytes or bytearray, not dict”这样的异常。
对于您提供的函数,无需对事件进行解码,因为它已经被自动转换为字典类型。您可以直接访问其键值,修正后的代码如下:
# -- coding: utf-8 --
def handler(event, context):
return event['key']
这个修复基于假设event参数确实包含一个名为'key'的键。如果实际事件结构不同,请相应地调整代码以正确访问所需数据。
你也可以在官网AWS Lambda官方文档:
Python处理事件教程:https://docs.aws.amazon.com/lambda/latest/dg/python-handler.html
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。