Python 中基于类的 AWS lambda

我在名为requestHandler.py 的python 中创建了一个基于类的 AWS lambda 函数,如下所示


from action_dispatcher import ActionDispatcher


class RequestHandler(ActionDispatcher):



    @staticmethod

    def createTemplate(event, context):

        return "Hello world"

我的action_dispatcher.py如下所示。


import json


class ActionDispatcher(object):


    def __call__(self, event, context, *args, **kwargs):


        action = event.get('action')

        handler = getattr(self, action, None)


        if handler is None:

            return json.loads({'status': 'error', 'code': 404, 'message':"Action {0} not found.".format(action) })


        return handler(request, *args, **kwargs)

使用上述设置和 lambda 处理程序作为requestHandler.RequestHandler,我收到错误“RequestHandler() 不接受任何参数”,在这种情况下,我将操作创建为 createTemplate。所以我想从 RequestHandler 调用这个方法。


侃侃无极
浏览 213回答 3
3回答

翻过高山走不出你

在我看来,您正在尝试调用您的类而不是类的实例。RequestHandler()将调用__init__方法来初始化类的实例。由于您尚未定义该方法,因此它不需要任何参数。要访问__call__您需要调用类的实例。handler = RequestHandler()result = handler(request, context, *args, **kwargs)

翻翻过去那场雪

您只能在 python 中使用def handler(event, context):. 但是,我找到了一个包,它允许您将处理程序作为一个类来调用如他们的文档中所述,用法如下:pip install aws-lambda-handlerimport aws_lambdaclass EchoHandler(aws_lambda.Handler):    """Echo handler."""    def perform(self, request, **k):        """Echo perform method."""        response = aws_lambda.Response()        response.body = self.request.event        return responseecho_handler = EchoHandler()# `echo_handler` is now a callable function you can map your AWS Lambda function to

烙印99

我的问题的解决方案很简单,正如 jacinator 所提到的,我应该尝试使用类实例。之前对于 lambda 处理程序,我使用传递类作为处理程序,现在我将类的实例作为处理程序传递。在requestHandler.py 中 添加了一行 rhandler = RequestHandler() 所以以前我的 lambda 处理程序是这样的 requestHandler.RequestHandler,现在它已更改为requestHandler.rhandler.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python