#python-3.x #chalice
#python-3.x #чаша
Вопрос:
Я определил это лямбда-выражение, запускаемое SNS, в Chalice:
@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
, но я не уверен, где искать дальше.
Ответ №1:
Проблема заключается в том, что функция оформлена, сбой находится в коде, который выполняет декоратор. Перенесите функциональность, которую вы хотите запустить рекурсивно, в отдельную функцию, и проблема должна исчезнуть.