如何解决Chalice框架中Python递归函数的奇怪问题
我在圣杯中定义了此SNS触发的Lambda:
@app.on_sns_message(topic='arn:aws:sns:us-west-1:XXXXXXXX:MyTopic')
def step1_photo_url_preload(event,retry = 3):
try:
js = json.loads(event.message)
... some logic here,event object is never modified ...
except:
if retry:
print("WARNING: Failed,%d retries remaining" % retry)
return step1_photo_url_preload(event,retry-1)
else:
raise
引发异常时,该函数最多应重试3次。
相反,我得到的是下面的异常。仔细观察一下踪迹:第56行显示了尝试递归调用时发生的错误:
[ERROR] TypeError: 'SNSEvent' object is not subscriptable
Traceback (most recent call last):
File "/var/task/chalice/app.py",line 1459,in __call__
return self.func(event_obj)
File "/var/task/app.py",line 56,in step1_photo_url_preload
return step1_photo_url_preload(event,retry-1)
File "/var/task/chalice/app.py",line 1458,in __call__
event_obj = self.event_class(event,context)
File "/var/task/chalice/app.py",line 1486,in __init__
self._extract_attributes(event_dict)
File "/var/task/chalice/app.py",line 1532,in _extract_attributes
first_record = event_dict['Records'][0]
神秘地,该函数无法与它第一次收到的event
对象一起使用。
是什么原因造成的?
我怀疑这可能与@app.on_sns_message
背后的魔力有关,但我不确定下一步该怎么看。
解决方法
问题在于装饰了函数,失败是在装饰器正在运行的代码中。将要递归运行的功能拉到一个单独的函数中,问题应该消失了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。