Ignorando Iterações em Python

159

Eu tenho um loop ativo, mas existe a possibilidade de gerar exceções dentro do loop. É claro que isso interromperia meu programa todos juntos. Para impedir que eu pegue as exceções e as trate. Mas o restante da iteração é executado, mesmo que uma exceção tenha ocorrido. Existe uma palavra-chave para usar na minha except:cláusula para ignorar o restante da iteração atual?

The.Anti.9
fonte
4
Não veja como a resposta aceita (use continue) captura exceções, mas foi aceita. Portanto, a pergunta é muito, muito confusa.
315/09 S.Lott
@ S.Lott Não preciso da palavra-chave para capturar a exceção, estava apenas falando sobre o fluxo geral do código total.
214309
@ The.Anti.9. O que? Primeiro você disse: "Quero pegar as exceções". Agora você está dizendo "Não preciso da palavra-chave para capturar a exceção". Você poderia esclarecer isso de alguma forma?
214/09 S.Lott
1
@ S.Lott. Eu não preciso para capturar a exceção com a palavra-chave, não só tem que ser uma tentativa, exceto instrução no código ....
The.Anti.9
1
Eu reformulei a pergunta para torná-la melhor para a resposta aceita.
Jilles de Wit

Respostas:

381

Você está procurando continuar .

André
fonte
31
Esta deve ser uma das respostas mais sucintas do SO que eu já vi!
Austin A
70
A verdadeira questão: está saindo o 'g' de 'lookth' Pythonic?
Mason Gardner
50
for i in iterator:
    try:
        # Do something.
        pass
    except:
        # Continue to next iteration.
        continue
Alex McBride
fonte
17

Algo assim?

for i in xrange( someBigNumber ):
    try:
        doSomethingThatMightFail()
    except SomeException, e:
        continue
    doSomethingWhenNothingFailed()
S.Lott
fonte
1
Editado para usar continuar em vez de passar.
Jilles de Wit
16

Exemplo 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')

Resultado:

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
fonte
5

Para esse caso de uso específico, usar try..except..elseé a solução mais limpa, a elsecláusula será executada se nenhuma exceção for gerada.

NOTA: A elsecláusula deve seguir todas as exceptcláusulas

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