开发者社区 > 云原生 > Serverless > 正文

函数计算中copy了上面这个简单的函数,但是提示出错了,有python版本的教程吗?

"函数计算中,# -- 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版本的教程吗?"

展开
收起
多麻辣哦 2024-01-03 14:49:27 30 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    根据您提供的错误信息,问题出在将字典类型的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()函数会自动将其转换为字符串。

    2024-01-03 21:51:31
    赞同 展开评论 打赏
  • 从错误信息来看,您在解析事件(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
    image.png

    2024-01-03 15:05:17
    赞同 展开评论 打赏

快速交付实现商业价值。

相关产品

  • 函数计算
  • 相关电子书

    更多
    All in Serverless 阿里云核心产品全面升级 立即下载
    AIGC 浪潮之上,森马的 Serverless 实践之旅 立即下载
    极氪大数据 Serverless 应用实践 立即下载