【问题标题】:Lambda Function in python returning configuration errorpython中的Lambda函数返回配置错误
【发布时间】:2020-12-08 03:05:05
【问题描述】:

我不断从我的 Lambda 函数中收到此错误消息:

Tue Aug 18 21:15:31 UTC 2020 : Execution failed due to configuration error: Malformed Lambda proxy response
Tue Aug 18 21:15:31 UTC 2020 : Method completed with status: 502

我想要做的是让用户输入两个数字。 lambda 函数获取这些数字并通过引用列表的函数运行它们。输出是列表中的一行,其中包含两个数字、一个名称和一条默认消息。 我的 Lambda 函数在 Python 3.6 中,我正在使用 GET 方法使用 API 网关。 List_r5 是一个带有小列表的 python 脚本:

import json
from math import cos, asin, sqrt
import List_r5

print('Loading function')

#Parse out query string parameters
def lambda_handler(event, context):
    usera_in = event['queryStringParameters']['usera_in']
    userb_in = event['queryStringParameters']['userb_in']

    print('UserA_In=' + usera_in)
    print('UserB_In=' + userb_in)

#Define the function
def dis(us1, ub1, us2, ub2):
    p = 0.017453292519943295
    a = 0.5 - cos((us2-us1)*p)/2 + cos(us1*p)*cos(us2*p) * (1-cos((ub2-ub1)*p)) / 2
    return 12742 * asin(sqrt(a))

def clo(database, input):
    return min(database, key=lambda p: dis(v['us'],v['ub'],p['us'],p['ub']))

    coord = {'us': usera_in, 'ub': userb_in}   
    output = clo(List_r5.data, coord)

    sta_output = output['NAME']
    us_output = output['us']
    ub_output = output['ub']

#Body of response object
    gResponse = {}
    gResponse['Sta'] = sta_output
    gResponse['UserA'] = us_output
    gResponse['UserB'] = ub_output
    gResponse['Message'] = 'All good on your end?'


#HTTP response object
    responseObject = {}
    responseObject['statusCode'] = 200
    responseObject['headers'] = {}
    responseObject['headers']['Content-Type'] = 'application/json'
    responseObject['body'] = json.dumps(gResponse)

#Return response object
    return responseObject

【问题讨论】:

  • 一个明显的问题是你的clo 函数立即返回min(database...),这意味着函数的其余部分,以及你实际上想要在函数末尾返回的响应对象,变得无法访问。
  • @DarthCadeus 谢谢。我已经编辑了代码,并且 clo 函数再次用于变量输出 5 行以下
  • @GK89 你能用更正的clo 函数更新你的代码 sn-p 吗?
  • @MCI 已更新:它只返回最小值。我运行 clo 函数几行以生成输出

标签: python-3.x api aws-lambda aws-api-gateway


【解决方案1】:

def clo. . . 之后到 sn-p 末尾的所有内容都在 clo 函数定义中,因此它永远不会被执行。取消缩进代码

def clo(database, input):
    return min(database, key=lambda p: dis(v['us'],v['ub'],p['us'],p['ub']))

coord = {'us': usera_in, 'ub': userb_in}   
output = clo(List_r5.data, coord)

sta_output = output['NAME']
us_output = output['us']
ub_output = output['ub']

#Body of response object
gResponse = {}
gResponse['Sta'] = sta_output
gResponse['UserA'] = us_output
gResponse['UserB'] = ub_output
gResponse['Message'] = 'All good on your end?'


#HTTP response object
responseObject = {}
responseObject['statusCode'] = 200
responseObject['headers'] = {}
responseObject['headers']['Content-Type'] = 'application/json'
responseObject['body'] = json.dumps(gResponse)

#Return response object
return responseObject

【讨论】:

    【解决方案2】:

    在我看来,这就像一个缩进问题。尝试缩进函数 dis() 和 clo() 及其内容。

    import json
    from math import cos, asin, sqrt
    import List_r5
    
    print('Loading function')
    
    #Parse out query string parameters
    def lambda_handler(event, context):
        usera_in = event['queryStringParameters']['usera_in']
        userb_in = event['queryStringParameters']['userb_in']
    
        print('UserA_In=' + usera_in)
        print('UserB_In=' + userb_in)
    
        #Define the function
        def dis(us1, ub1, us2, ub2):
            p = 0.017453292519943295
            a = 0.5 - cos((us2-us1)*p)/2 + cos(us1*p)*cos(us2*p) * (1-cos((ub2-ub1)*p)) / 2
            return 12742 * asin(sqrt(a))
    
        def clo(database, input):
            return min(database, key=lambda p: dis(v['us'],v['ub'],p['us'],p['ub']))
    
        coord = {'us': usera_in, 'ub': userb_in}   
        output = clo(List_r5.data, coord)
    
        sta_output = output['NAME']
        us_output = output['us']
        ub_output = output['ub']
    
    #Body of response object
        gResponse = {}
        gResponse['Sta'] = sta_output
        gResponse['UserA'] = us_output
        gResponse['UserB'] = ub_output
        gResponse['Message'] = 'All good on your end?'
    
    
    #HTTP response object
        responseObject = {}
        responseObject['statusCode'] = 200
        responseObject['headers'] = {}
        responseObject['headers']['Content-Type'] = 'application/json'
        responseObject['body'] = json.dumps(gResponse)
    
    #Return response object
        return responseObject
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-03
      • 1970-01-01
      • 2018-05-12
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 2019-06-22
      相关资源
      最近更新 更多