簡體   English   中英

遞歸 function 調用無法在 AWS Lambda 中遞歸 - Python3

[英]Recursive function call fails to recurse in AWS Lambda - Python3

我試圖用不同的鍵名遞歸地替換 python 字典鍵,為此我使用 aws lambda 和 api 端點來觸發。 令人驚訝的是遞歸部分由於奇怪的原因而失敗。 相同的代碼在本地工作正常。

檢查了 cloudwatch 日志。 那里沒有顯示錯誤消息。 如果我在這里遺漏任何東西,請告訴我

編輯:與Unable to invoke a recursive function with AWS Lambdarecursive lambda function never seems to run 有關

### function that is called inside lambda_handler

def replace_recursive(data,mapping):
    for dict1 in data:
        for k,v in dict1.copy().items():
            if isinstance(v,dict):
                dict1[k] = replace_recursive([v], mapping)
            try:
                dict1[mapping['value'][mapping['key'].index(k)]] = dict1.pop(mapping['key'][mapping['key'].index(k)])
            except KeyError:
                continue
    return data
## lambda handler

def lambda_handler(events,_):
    resp = {'statusCode': 200}
    parsed_events = json.loads(events['body'])
    if parsed_events:
        op = replace_recursive(parsed_events,schema)
        resp['body'] = json.dumps(op)
    return resp

輸入我通過:

{
  "name": "michael",
  "age": 35,
  "family": {
    "name": "john",
    "relation": "father"
  }
}

在 output 中,嵌套字典中的鍵沒有得到更新。 只有外鍵被修改

由於您正在攝取 JSON,因此您可以使用json.loadsobject_pairs_hook參數在解析階段進行密鑰替換,以獲得更快、更簡單的體驗。

import json

key_mapping = {
    "name": "noot",
    "age": "doot",
    "relation": "root",
}


def lambda_handler(events, _):
    replaced_events = json.loads(
        events["body"],
        object_pairs_hook=lambda pairs: dict(
            (key_mapping.get(k, k), v) for k, v in pairs
        ),
    )
    return {
        "statusCode": 200,
        "body": json.dumps(replaced_events),
    }


body = {
    "name": "michael",
    "age": 35,
    "family": {"name": "john", "relation": "father"},
}
print(
    lambda_handler(
        {
            "body": json.dumps(body),
        },
        None,
    )
)

打印出來

{'statusCode': 200, 'body': '{"noot": "michael", "doot": 35, "family": {"noot": "john", "root": "father"}}'}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM