【问题标题】:Syntax error in module 'lambda_function': invalid syntax when changing lambda function to python from js模块 \'lambda_function\' 中的语法错误:将 lambda 函数从 js 更改为 python 时语法无效
【发布时间】:2022-12-06 00:45:12
【问题描述】:

我使用运行时设置 Java 脚本 Node.js18.x 创建了一个 lambda 函数,并将运行时设置更改为 python 3.9 并将 HandlerInfo 更改为 lambda_function.lambda_handler。我在测试此功能时收到一条错误消息。

错误消息“errorMessage”:“模块‘lambda_function’中的语法错误:语法无效(lambda_function.py,第 4 行)”

import time
import boto3

query = 'SELECT * FROM default.tb'
DATABASE = 'default'
output='s3://AWSDOC-EXAMPLE-BUCKET/'

def lambda_handler(event, context):
    query = "SELECT * FROM default.tb"
    client = boto3.client('athena')
    # Execution
    response = client.start_query_execution(
        QueryString=query,
        QueryExecutionContext={
            'Database': DATABASE
        },
        ResultConfiguration={
            'OutputLocation': output,
        }
    )
    return response
    return

第 4 行是 query = 'SELECT * FROM default.tb'

AWS 参考文件在这里 https://aws.amazon.com/premiumsupport/knowledge-center/schedule-query-athena/

为什么我会收到此错误消息?

【问题讨论】:

  • 如果您删除该行,当您在处理函数的第一行中重新声明该变量时,您是否会在几行之后得到相同的错误?
  • 另外,为什么你有两个return声明?

标签: python amazon-web-services aws-lambda amazon-athena


【解决方案1】:

您的代码是 query = 'SELECT * FROM default.tb',它在行尾缺少一个冒号 : 。在 Python 中,定义变量的语法是 variable_name = value,value 后面必须跟一个冒号 :。

以下是在代码第 4 行定义查询变量的正确语法:

import time
import boto3

query = 'SELECT * FROM default.tb' 
DATABASE = 'default'
output='s3://AWSDOC-EXAMPLE-BUCKET/'

def lambda_handler(event, context):
    query = "SELECT * FROM default.tb"
    client = boto3.client('athena')
    # Execution
    response = client.start_query_execution(
        QueryString=query,
        QueryExecutionContext={
            'Database': DATABASE
        },
        ResultConfiguration={
            'OutputLocation': output,
        }
    )
    return response
     

【讨论】:

  • 为什么赋值语句的末尾需要一个冒号?
  • 固定它在 lambda 中有两个回报
  • 重复的 returns 不是 SyntaxError。它永远不会达到。
  • 您编写的代码仍然是用 JavaScript 编写的。错误消息告诉您第 4 行存在语法错误,即 query = 'SELECT * FROM default.tb' 行。此行是有效的 JavaScript 语法,但不是有效的 Python 语法。在 Python 中,您需要对字符串文字使用单引号 (') 而不是双引号 ("),因此您需要将此行更改为 query = 'SELECT * FROM default.tb'。
  • 那根本不是真的。 '" 在 python 中都有效。
猜你喜欢
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多