Python: uma tentativa múltipla, exceto

195

No Python, é possível ter várias exceptinstruções para uma tryinstrução? Tal como :

try:
 #something1
 #something2
except ExceptionType1:
 #return xyz
except ExceptionType2:
 #return abc
Eva611
fonte
7
@ Eva611: Não se desculpe. (1) tente. (2) publique uma resposta para sua pergunta.
S.Lott 23/05
6
Isso funciona. Tentei com o intérprete python ...
Eva611 23/05
38
@ Eva611 Acho que sua pergunta foi boa. Foi muito mais rápido para mim pesquisar no Google do que em criar um exemplo no intérprete Python, então fiquei feliz por você ter perguntado. DrTysa e outros deveriam ter respondido com um "sim" rápido, em vez de repreendê-lo.
galarant
5
Na maioria das vezes, seu primeiro palpite será errado ou perderá nuances sutis, então (como 15.000 outros), tentei o Google primeiro!
Chris
9
Eu tentei o google e encontrei esta pergunta. Portanto, fico feliz que alguém o tenha solicitado em um fórum tão público como o SO, e estou satisfeito com o número de outras pessoas vinculadas a ele que o algoritmo do google apareceu como meu primeiro resultado.
kingledion 27/07

Respostas:

328

Sim, é possível.

try:
   ...
except FirstException:
   handle_first_one()

except SecondException:
   handle_second_one()

except (ThirdException, FourthException, FifthException) as e:
   handle_either_of_3rd_4th_or_5th()

except Exception:
   handle_all_other_exceptions()

Veja: http://docs.python.org/tutorial/errors.html

A palavra-chave "as" é usada para atribuir o erro a uma variável, para que o erro possa ser investigado mais detalhadamente posteriormente no código. Observe também que os parênteses para o caso de exceção tripla são necessários no python 3. Esta página possui mais informações: Capture várias exceções em uma linha (exceto o bloco)

vartec
fonte
76
Se você quer fazer a mesma coisa nos dois casos, é except (SomeError, OtherError):. Não responde à pergunta do OP, mas pode ajudar algumas pessoas que chegam aqui pelo Google.
Mark
Se, por exemplo, você tiver que converter várias versões de uma estrutura de dados em uma nova estrutura, ao atualizar versões de código, por exemplo, é possível aninhar as tentativas ..
Rolf of Saxony
5
Se você deseja lidar com todas as exceções, deve usar em except Exception:vez de simples except:. (Plain exceto vai pegar mesmo SystemExite KeyboardInterruptque geralmente não é o que você quer)
polvoazul
Talvez você queira fazer alguma coisa etambém desde que você o nomeie :)
HelloGoodbye