微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Chalice框架中Python递归函数的奇怪问题

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?