簡體   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