2011-03-02 7 views
8

Mi código es el siguiente:en torno al aumento IndexError

for p in qs: 
    set = None 
    try: 
     set = p.property.property_locations.all() 
    except IndexError: 
     pass 

    if set: 

El problema es que cuando juego no es todavía lanza IndexError de esta parte de django.db.models.query:

try: 
    qs = self._clone() 
    qs.query.set_limits(k, k + 1) 
    return list(qs)[0] 
except self.model.DoesNotExist, e: 
    raise IndexError(e.args) 

¿Cómo detener el sistema de lanzar este error y continuar al siguiente elemento en for loop?

+0

¿Funciona cuando cambias el nombre a algo diferente? set es una función incorporada. – Rudi

+0

"cuando está configurado no es ninguno"? Estás configurando 'set' en' None'. Debe ** siempre ** ser 'Ninguno'. ¿Cuál es tu pregunta, en realidad? –

+1

¿Qué ** exactamente es tu problema? Asignar un objeto 'QuerySet' a' set' ** nunca ** generará un 'IndexError'. ¿Puedes ser un poco más preciso? –

Respuesta

14

En cualquier caso, hay dos errores en su código:

  1. conjunto es una orden interna (como se puede ver en el resaltado de sintaxis del SO), por lo que al dar la variable de ese nombre que estés sombreando la orden interna sin ningún propósito, que al menos es mala práctica, y es probable que cause problemas más adelante en el código.
  2. La forma canónica para comprobar si se ha ajustado no es Nada es escribiendo: si se ha ajustado no es Ninguno

Mejor aún, la forma canónica para escribir ese fragmento de código es:

try: 
    [code that might raise an exception] 
except Error: 
    [code that handles the exception] 
else: 
    [code that executes when no exception was raised] 

(sustituto Error para la excepción real, por supuesto)

De esa manera ni siquiera tiene que marcar 'establecer' en ese punto.

Cuestiones relacionadas