es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El objeto de tipo ‘LambdaContext’ no tiene len().

Estoy intentando implementar una función de Python en AWS Lambda.

A continuación se muestra un ejemplo de mi código:

import psycopg2
from password.redshift_credentials import username, password, host, port, database

def security_group_update(event,context):
    # conectar a Redshift, se utiliza la biblioteca psycopg2 para ejecutar declaraciones SQL
    con = psycopg2.connect(dbname=database, host=host, port=port, user=username, password=password)

    for i in range(len(context)):
        print(context)
        command = "GRANT USAGE on schema " + context[i] + " TO GROUP " + event + ";\n " + \
                  "GRANT SELECT ON ALL TABLES IN SCHEMA " + context[i] + " TO GROUP " + event + ';'
        print(command)
        # Abrir un cursor y ejecutar la consulta de copia
        cur = con.cursor()
        cur.execute(command)
        con.commit()

    # Cerrar el cursor y la conexión
    cur.close()
    con.close()

    return {
        "statusCode": 200
    }

group = 'analytics'
schemas = ['acquisition',
           'cohort<em>analytics',
           'dev<em>vegalash<em>traffic',
           'sources',
           'facebook28',
           'facebook28<em>veg2'
           ]

security_group_update(group, schemas)

Estoy obteniendo este error…

Respuesta:
{
“errorMessage”: “object of type ‘LambdaContext’ has no len()”,
“errorType”: “TypeError”,
“stackTrace”: [
“File \”/var/task/security-group-permissions.py\”, line 12, in security_group_update\n for i in range(len(context)):\n”
]
}

Me pregunto si alguien ha enfrentado el mismo problema.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema se encuentra en la declaración len(context) en el bucle for. El mensaje de error indica que el tipo de objeto ‘LambdaContext’ no tiene una longitud, lo que sugiere que ‘context’ es una instancia de ‘LambdaContext’, y no una lista.

    Para solucionar este problema, revise los parámetros de entrada de la función ‘security_group_update’ y asegúrese de que ‘context’ sea una lista. Alternativamente, puede modificar el código para manejar casos en los que ‘context’ pueda no ser una lista de la siguiente manera:

    if not isinstance(context, list):
        context = [context]
    
    for i in range(len(context)):
        # hacer algo con context[i]
    

    Este fragmento de código comprueba si ‘context’ no es una lista y lo convierte explícitamente en una lista, si es necesario. Si ‘context’ ya es una lista, el bucle procede normalmente.

Comments are closed.