【发布时间】:2021-07-06 21:28:20
【问题描述】:
我不太清楚为什么这段代码会失败,我很高兴听到你的想法。我使用了 boto3 中的示例及其一般工作,但在某些情况下我会突然得到一个 AttributeError 。请解释我做错了什么,因为如果有效负载为 None,我将收到 JSON 解码错误,但不是 None 对象。
这是导致异常的代码的简化版本。
import boto3
import json
client = boto3.client('lambda', region_name='...')
res = client.invoke(
FunctionName='func',
InvocationType='RequestResponse',
Payload=json.dumps({'param': 123})
)
payload = json.loads(res["Payload"].read().decode('utf-8'))
for k in payload.keys():
print(f'{k} = {payload[k]}')
错误
----
[ERROR] AttributeError: 'NoneType' object has no attribute 'keys'
Traceback (most recent call last):
.....
【问题讨论】:
-
您是否在 lambda 结束时返回任何内容?当你在本地运行它时会返回什么?你能验证你的 lambda 正在运行吗?
-
@CoinGraham 应该会返回一些东西,但如果 StreamingBody 为空,会不会是 JSON 解码错误?只是想了解它是如何工作的。
-
不确定。在你 json.load 之前它实际上返回了什么?
-
@CoinGraham 老实说,我不知道到目前为止我只得到过一次并且无法复制。由于某种原因,有效负载为 None 并且 json.loads 不会引发任何错误。它让我失望,我没有任何期望。任何想法为什么会发生这种情况?
标签: python amazon-web-services aws-lambda boto3