【问题标题】:Python if condition to check if event has a element [duplicate]Python if条件检查事件是否有元素[重复]
【发布时间】:2021-12-16 17:58:01
【问题描述】:

如何测试event 是否包含body json 元素?我收到以下错误[ERROR] KeyError: 'body'。我想确保即使 curl 可以调用 lambda 函数以及其他 lambda 函数可以调用这个 lambda。但是当请求不是通过 curl 时,没有 body 元素,因此我试图创建一个 if 条件来设置变量。

from modules.ZabbixSender import ZabbixSender
import json

def lambda_handler(event, context):
    
    print(event)

    if event["body"]: // KEY ERROR
        requestBody = json.loads(event["body"])
    else:
        requestBody = json.loads(event)
        
    print(requestBody)

    Host = requestBody['Host']
    Key = requestBody['Key'] 
    Value = requestBody['Value']

    sender = ZabbixSender("10.10.10.10", 10051)
    sender.add(Host, Key, Value)
    sender.send()
    
    return {
        "statusCode": 200,
        "headers": {
            "Content-Type": "application/json"
        },
        "body": json.dumps({
            "Host": Host,
            "Key" : Key,
            "Value" : Value,
            "Status": "Successfully updated Zabix Server"
        })
    }

【问题讨论】:

    标签: python json python-3.x aws-lambda


    【解决方案1】:

    如果event 是字典,您可以简单地对字典使用get 方法。像这样:

    if event.get("body"):
        requestBody = json.loads(event["body"])
    else:
        requestBody = json.loads(event)
    

    或者更好的事件,您可以将其放入单行中:

    requestBody = json.loads(event["body"]) if event.get("body") else json.loads(event)
    

    这样,如果字典中存在key,则返回键的值,否则返回None。这应该会给您预期的行为。

    【讨论】:

      【解决方案2】:

      你可以试试这个:

      if "body" in event:
          requestBody = json.loads(event["body"])
      else:
          requestBody = json.loads(event)
      

      可以写入

      requestBody = json.loads(event["body"]) if "body" in event else json.loads(event)
      

      【讨论】:

        猜你喜欢
        • 2010-12-03
        • 1970-01-01
        • 2020-01-15
        • 1970-01-01
        • 2013-03-06
        • 1970-01-01
        • 2014-08-22
        • 2016-06-07
        • 2012-10-01
        相关资源
        最近更新 更多