在Python 3.6 AWS Lambda函数中输出事件数据

2024-04-25 17:07:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在AWS Lambda Python函数中输出一个名为sheetID的事件,但似乎无法获得正确的语法

以下是一段代码片段:


def lambda_handler(event, context):
    scraper = Scraper()
    scraper.run()
    return { "Message": "Scrape function ran correctly!" }

class Scraper():
    def __init__(self):
        log.debug("Starting scraper...")
        scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
        credentials = sac.from_json_keyfile_name('src/h9d7246486f2.json', scope)

        log.debug("Authorizing gspread...")
        self.gc = gspread.authorize(credentials)
        self.spreadsheet = self.gc.open_by_key(event['sheetID'])
...

这就是问题所在:

self.spreadsheet = self.gc.open_by_key(event['sheetID'])

它以前有一个静态的谷歌表单名称

self.spreadsheet = self.gc.open("CorStats")

testlambda函数可以很好地处理事件数据,但不确定是否可以或应该在上述函数中使用格式部分

def my_handler(event, context):
    message = 'Hello {} {}!'.format(event['key1'], 
                                    event['key3'])  
    return { 
        'message' : message
    }  

以下是错误日志:

{
  "errorMessage": "name 'event' is not defined",
  "errorType": "NameError",
  "stackTrace": [
    [
      "/var/task/src/scrape_lambda.py",
      18,
      "lambda_handler",
      "scraper = Scraper()"
    ],
    [
      "/var/task/src/scrape_lambda.py",
      30,
      "__init__",
      "self.spreadsheet = self.gc.open_by_key(event['sheetID'])"
    ]
  ]
}

Tags: lambdakey函数selfsrceventbydef
1条回答
网友
1楼 · 发布于 2024-04-25 17:07:14

您需要在__init__方法中包含事件,例如def __init__(self, event):,然后用scraper = Scraper(event)实例化它

def __init__(self, sheet_id),然后做scraper = Scraper(event['sheetID'))self.spreadsheet = self.gc.open_by_key(sheet_id)可能更干净。通过这种方式,您已经将Scraper类与lambda事件解耦,并且可以单独测试它

相关问题 更多 >