[英]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.