Coletânea Python do ZERO às Redes Neurais Artificiais
Comandos try, except e finally
Pelas boas práticas de programação, uma solução elegante é prevermos os possíveis erros e/ou na pior das hipóteses apenas mostrar alguma mensagem de erro ao usuário, apontando que está havendo alguma exceção, algo não previsto durante a execução do programa.
Ainda trabalhando em cima do exemplo anterior, o traceback se deu pelo fato de estarmos tentando somar um int de valor 13 e um dado ad que não faz sentido algum para o interpretador.
Através do comando try (em tradução livre do inglês = tentar) podemos fazer, por exemplo, com que o interpretador tente executar a soma dos valores daquelas variáveis.
Se não for possível, será executado o comando except (em tradução livre = exceção), que terá um print mostrando ao usuário uma mensagem de erro e caso for possível realizar a operação o mesmo executará um comando finally (em tradução livre = finalmente) com o retorno e resultado previsto.
Repare que o comando inicial deste bloco de código é o try, pela indentação, note que é declarada a variavel num1 que pede para o usuário que digite o primeiro número, em seguida é declarada uma segunda variavel de nome num2 e novamente se pede para que o usuário digite o segundo número a ser somado.
Como já vimos anteriormente, o comando input aceita qualquer coisa que o usuário digitar, de qualquer tamanho, inclusive com espaços e comandos especiais, o input encerra sua fase de captação quando o usuário finalmente aperta ENTER.
Supondo que o usuário digitou nas duas vezes que lhe foi solicitado um número, o código irá executar o bloco finally, que por sua vez cria a variável temporária soma, faz a devida soma de num1 e num2 e por fim exibe em tela uma string com o resultado da soma.
Mas caso ainda no bloco try o usuário digitar algo que não é um número, tornando impossível a soma dos mesmos, isto irá gerar uma exceção, o bloco except é responsável por capturar esta exceção, ver que algo do bloco anterior está errado, e por fim, neste caso, exibe uma mensagem de erro previamente declarada.
Este é um exemplo de calculadora de soma de dois números onde podemos presumir que os erros que ocorrerão são justamente quando o usuário digitar algo fora da normalidade.
Importante salientar que se você olhar a documentação do Python em sua versão 3 você verá que existem vários muitos tipos de erro que você pode esperar em seu código e por fins de performance (apenas por curiosidade, Python 3 oferece reconhecimento a 30 tipos de erro possíveis), junto do comando except: você poderia declarar o tipo de erro para poupar processamento.
Supondo que é um programa onde o tipo de arquivo pode gerar uma exceção, o ideal, pelas boas práticas de programação seria declarar um except TypeError: assim o interpretador sabe que é previsto aquele tipo de erro em questão (de tipo) e não testa todos os outros possíveis erros.
Porém em seus primeiros programas não há problema nenhum em usar um except: que de forma básica chama esta função que irá esperar qualquer tipo de erro dentro de seu banco de dados sintático.
Na prática você verá que é bastante comum usarmos try e except em operações onde o programa interage com o usuário, uma vez que é ele que pode inserir um dado inválido no programa gerando erro.