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.

Cómo evitar el error de índice de lista fuera de rango en una consulta Django ORM

Tengo aquí un escenario complicado, usualmente obtengo 6 valores de la siguiente consulta, básicamente los precios al inicio y al final del mes, el valor de los precios siempre estará presente.

fecha_comercial precio
01-01-2021 120.2
31-01-2021 220.2
01-02-2021 516.2
28-02-2021 751.0
01-03-2021 450.2
31-03-2021 854.9

y necesito la suma del precio de inicio del primer mes + precio de final del primer mes + precio de final de todos los meses
es decir 120.2+220.2+751.0+854.9
pero en algunos casos, los datos del último mes tienden a faltar, ¿cómo manejar esos escenarios?

valores_mensuales = Items.objects.filter(fecha_comercial__gte=fecha_inicio_trimestre, fecha_comercial__lte=fecha_fin_trimestre).values_list(‘precio’, flat=True).order_by(‘fecha_comercial’)

suma_total = valores_mensuales[0] + valores_mensuales[1] + valores_mensuales[3] + valores_mensuales[5])

Actualmente obtengo “índice de lista fuera de rango” debido a la falta de valores.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para manejar valores faltantes en la lista “monthly_values”, puedes verificar la longitud de la lista antes de acceder a sus elementos. Puedes agregar una declaración “if” para verificar si la longitud es mayor o igual al número esperado de valores (6 en este caso). Si la longitud es menor a 6, puedes manejar los valores faltantes de acuerdo a tus necesidades. Por ejemplo, si falta el dato del último mes, puedes excluirlo del cálculo.

    Aquí está el fragmento de código actualizado:

    monthly_values = Items.objects.filter(trade_date__gte=quarter_start_date,
                                  trade_date__lte=quarter_end_date).values_list('price',
                                  flat=True).order_by('trade_date')
    
    if len(monthly_values) >= 6:
        total_sum = monthly_values[0] + monthly_values[1] + monthly_values[3] + monthly_values[5]
    else:
        # manejar valores faltantes
    

    Puedes modificar el bloque “else” para manejar los valores faltantes según tus requisitos específicos.

Comments are closed.