繁体   English   中英

AWS Lambda [ERROR] 函数采用 1 个位置参数,但给出了 2 个

[英]AWS Lambda [ERROR] Function takes 1 positional argument but 2 were given

我正在创建我的(第一个)Lambda 函数。 Lambda 旨在打开/关闭飞利浦 HUE 灯泡。 Lambda 函数的触发器是 AWS IoT (Dash) 按钮。

但是,在触发我的 Lambda 函数后,我收到以下错误消息:

[ERROR] TypeError: lambda_handler() takes 1 positional argument but 2 were given
Traceback (most recent call last):
  File "/var/runtime/bootstrap.py", line 131, in handle_event_request
    response = request_handler(event, lambda_context)

任何人都可以深入了解我的 Python 代码有什么问题吗? 谢谢!

import requests,json

bridgeIP = "PublicIPAddress:999"
userID = "someone"
lightID = "2"

def lambda_handler(lightID):
 url = "http://"+bridgeIP+"/api/"+userID+"/lights/"+lightID
 r = requests.get(url)
 data = json.loads(r.text)
 if data["state"]["on"] == False:
     r = requests.put(url+"/state",json.dumps({'on':True}))
 elif data["state"]["on"] == True:
     r = requests.put(url+"/state",json.dumps({'on':False}))

lambda_handler(lightID)

错误消息告诉您,给lambda_handler函数提供了两个位置参数,但该函数被定义为仅接受一个。

Lambda 会自动为处理函数提供两个参数,因此您需要定义函数以接受两个参数。

您可以通过将函数定义更改为:

def lambda_handler(lightID, lambda_context):

您的处理程序函数应定义为:

def lambda_handler(event, context):
    lightID = event
    ...

来自Python 中的 AWS Lambda 函数处理程序 - AWS Lambda

event – AWS Lambda 使用此参数将事件数据传递给处理程序。 此参数通常是 Python dict 类型。 它也可以是 list、str、int、float 或 NoneType 类型。

当您调用您的函数时,您将确定事件的内容和结构。 当 AWS 服务调用您的函数时,事件结构因服务而异。

context – AWS Lambda 使用此参数向您的处理程序提供运行时信息。

您的event很可能仅包含代码所示的 Light ID,但最好将其称为event以识别它是传递给 Lambda 函数的值,但您的代码随后选择将其解释为lightID

此外,您的代码不应调用lambda_handler函数。 AWS Lambda 服务将在调用该函数时执行此操作。

最后,您可能希望利用 Python 3.x f-strings,它可以生成更漂亮的格式字符串:

import requests
import json

bridgeIP = "PublicIPAddress:999"
userID = "someone"

def lambda_handler(event, context):
    lightID = event
    url = f"http://{bridgeIP}/api/{userID}/lights/{lightID}"

    r = requests.get(url)
    data = json.loads(r.text)

    r = requests.put(f"{url}/state", json.dumps({'on': not data["state"]["on"]}))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM