Saltar iteraciones en Python

159

Tengo un ciclo en marcha, pero existe la posibilidad de que se generen excepciones dentro del ciclo. Por supuesto, esto detendría mi programa todos juntos. Para evitarlo, atrapo las excepciones y las manejo. Pero luego el resto de la iteración se ejecuta a pesar de que ocurrió una excepción. ¿Hay una palabra clave para usar en mi except:cláusula para omitir el resto de la iteración actual?

The.Anti.9
fuente
44
No veo cómo la respuesta aceptada (uso continue) captura excepciones, pero fue aceptada. Por lo tanto, la pregunta es realmente muy confusa.
S.Lott
@ S.Lott No necesito que la palabra clave atrape la excepción, solo estaba hablando del flujo general del código total.
The.Anti.9
@ The.Anti.9. ¿Qué? Primero dijiste "Quiero atrapar las excepciones". Ahora estás diciendo "No necesito la palabra clave para detectar la excepción". ¿Podría aclarar esto de alguna manera?
S.Lott
1
@ S.Lott. No necesito atrapar la excepción con la palabra clave, solo tiene que intentarlo, excepto la declaración en el código ...
The.Anti.9
1
Reescribí la pregunta para que coincida mejor con la respuesta aceptada.
jilles de wit

Respuestas:

381

Estás buscando continuar .

André
fuente
31
¡Esta debe ser una de las respuestas SO más sucintas que he visto!
Austin A
70
La verdadera pregunta: ¿Dejar la 'g' en 'lookin' Pythonic?
Mason Gardner
50
for i in iterator:
    try:
        # Do something.
        pass
    except:
        # Continue to next iteration.
        continue
Alex McBride
fuente
17

¿Algo como esto?

for i in xrange( someBigNumber ):
    try:
        doSomethingThatMightFail()
    except SomeException, e:
        continue
    doSomethingWhenNothingFailed()
S.Lott
fuente
1
Editado para usar continuar en lugar de pasar.
jilles de wit
16

Ejemplo para continuar:

number = 0

for number in range(10):
   number = number + 1

   if number == 5:
      continue    # continue here

   print('Number is ' + str(number))

print('Out of loop')

Salida:

Number is 1
Number is 2
Number is 3
Number is 4
Number is 6 # Note: 5 is skipped!!
Number is 7
Number is 8
Number is 9
Number is 10
Out of loop
Jesu Kiran Spurgen
fuente
5

Para este caso de uso específico, el uso try..except..elsees la solución más limpia, la elsecláusula se ejecutará si no se produce una excepción.

NOTA: La elsecláusula debe seguir todas las exceptcláusulas.

for i in iterator:
    try:
        # Do something.
    except:
        # Handle exception
    else:
        # Continue doing something
Istvan Jeno Veres
fuente