Python - tratamento avançado de exceções

Índice
Uma vez levantada uma exceção, é nosso dever tratá-la, desta forma nosso programa poderá executar uma ação, levantar uma mensagem, solicitar a correção do parâmetro inserido pelo usuário, enfim, muitas possibilidades .
Captura de exceções
Como mencionamos antes, o importante quando vemos uma exceção é poder capturá-la desta forma, podemos decidir o que o programa deve fazer quando essa situação ocorrer, para fazer isso usaremos os comandos tente / exceto. Para demonstrar o que foi dito acima, vamos analisar um programa de divisão muito simples, pois sabemos que não podemos dividir um número por 0, portanto, isso gerará uma exceção.
Vamos começar a construir nosso código, lembre-se que podemos fazer isso em qualquer editor de texto e devemos salvar o arquivo com a extensão .py para que possamos executá-lo em nossa linha de comando ou console.
 x = input ('Digite o primeiro número:') y = input ('Digite o segundo número:') print x / y [/ size] [size = 4]

Isso funcionará muito bem até que o usuário insira o valor 0 como o segundo argumento, isso gerará uma exceção, como podemos ver na imagem a seguir da execução deste programa:

Podemos evitar isso usando o tente / exceto que vimos no início desta seção, vamos ver nosso código corrigido:
 try: x = input ('Digite o primeiro número:') y = input ('Digite o segundo número:') print x / y exceto ZeroDivisionerror: print "O segundo número não pode ser zero!" 

Esta forma de lidar com este caso é bastante limpa, apesar de tudo também se poderia dizer que com um simples E se isso condicionaria que o valor de Y Não seria 0 seria uma solução adequada, no entanto, se adicionássemos mais divisões ao nosso programa, precisaríamos de mais condicionais, em vez disso, precisamos apenas de um único manipulador da possível exceção que é gerada.
Pegue mais de uma exceção
Continuando com o exemplo da divisão em que estamos trabalhando, vamos ver o que aconteceria se em vez de um 0 inseríssemos outra coisa:

Na imagem podemos ver que um texto foi inserido e nosso manipulador que esperava apenas uma exceção do tipo ZeroDivisionerror não podia fazer o tratamento adequado, pois não sabia o que fazer com a nova exceção gerada.
Para capturar a nova exceção, vamos simplesmente adicionar um novo bloco exceto ser capaz de lidar com a exceção TypeError que é gerado dividindo um número por um texto.
Vamos ver nosso código corrigido:
 try: x = input ('Digite o primeiro número:') y = input ('Digite o segundo número:') print x / y exceto ZeroDivisionerror: print "O segundo número não pode ser zero!" exceto TypeError: print "Aquilo não era um número, era?" 

Se tivéssemos escolhido usar condicionais E se, essa tarefa teria nos levado muito mais linhas de código, além de tornar nosso programa menos legível.
Captura de duas exceções no mesmo bloco
Se o que precisamos é pegar várias exceções em um único bloco exceto o que devemos fazer é adicioná-los na declaração entre parênteses, vamos ver o código para entendê-lo melhor:
[/ size] try: x = input ('Digite o primeiro número:') y = input ('Digite o segundo número:') print x / y exceto ZeroDivisionerror: print "O segundo número não pode ser zero!" exceto TypeError: [/ size] [size = 4] print "Isso não era um número, era?" 

Como pudemos ver, aconteça o que acontecer, o aplicativo continuará a nos enviar a mesma mensagem, quer um 0 seja inserido ou algo diferente de um número seja inserido.Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo
wave wave wave wave wave