Python Exception Handling Usando tentativa, excepto e finalmente declaração
Excepções em Python
Python tem muitas excepções incorporadas que são levantadas quando o seu programa encontra um erro (algo no programa corre mal).
Quando estas excepções ocorrem, o intérprete Python pára o processo actual e passa-o para o processo de chamada até que seja tratado. Se não for tratado, o programa irá falhar.
Por exemplo, consideremos um programa onde temos uma função A
que chama a função B
, que por sua vez chama a função C
. Se ocorrer uma excepção na função C
mas não for tratada em C
, a excepção passa para B
e depois para A
.
Se nunca for tratada, é exibida uma mensagem de erro e o nosso programa pára repentinamente inesperadamente.
Cobrir excepções em Python
Em Python, as excepções podem ser tratadas usando uma cláusula try
.
A operação crítica que pode levantar uma excepção é colocada dentro da cláusula try
. O código que trata das excepções é escrito na cláusula except
cláusula.
Podemos assim escolher quais as operações a realizar depois de termos apanhado a excepção. Aqui está um exemplo simples.
Output
Neste programa, fazemos um loop através dos valores da lista da lista aleatória. Como mencionado anteriormente, a parte que pode causar uma excepção é colocada dentro do try
bloco.
Se não ocorrer qualquer excepção, o except
bloco é ignorado e o fluxo normal continua(para o último valor). Mas se ocorrer qualquer excepção, é apanhado pelo except
bloco (primeiro e segundo valores).
Aqui, imprimimos o nome da excepção utilizando o módulo exc_info()
função dentro de sys
. Podemos ver que a
causa ValueError
e 0
causa ZeroDivisionError
.
Desde que cada excepção em Python herde da base Exception
classe, também podemos executar a tarefa acima referida da seguinte forma:
Este programa tem a mesma saída que o programa acima.
Cobrir Excepções Específicas em Python
No exemplo acima, não mencionámos qualquer excepção específica no except
cláusula.
Esta não é uma boa prática de programação, uma vez que apanhará todas as excepções e tratará todos os casos da mesma forma. Podemos especificar que excepções uma cláusula except
deverá apanhar.
A try
pode ter qualquer número de cláusulas except
para tratar diferentes excepções, contudo, apenas uma será executada no caso de ocorrer uma excepção.
Podemos utilizar um tuple de valores para especificar múltiplas excepções numa cláusula de excepção. Aqui está um exemplo de pseudo código.
try: # do something passexcept ValueError: # handle ValueError exception passexcept (TypeError, ZeroDivisionError): # handle multiple exceptions # TypeError and ZeroDivisionError passexcept: # handle all other exceptions pass
Subir Excepções em Python
Na programação Python, as excepções são levantadas quando ocorrem erros em tempo de execução. Podemos também levantar excepções manualmente utilizando o raise
palavra-chave.
Podemos opcionalmente passar valores à excepção para esclarecer porque é que essa excepção foi levantada.
Python tentar com outra cláusula
Em algumas situações, poderá querer executar um determinado bloco de código se o bloco de código dentro de try
correr sem quaisquer erros. Para estes casos, pode utilizar o opcional else
palavra-chave com o try
declaração.
nota: As excepções na outra cláusula não são tratadas pela anterior excepto as cláusulas.
Vejamos um exemplo:
Output
Se passarmos um número ímpar:
Enter a number: 1Not an even number!
Se passarmos um número par, o recíproco é computado e exibido.
Enter a number: 40.25
No entanto, se passarmos 0, obtemos ZeroDivisionError
como o bloco de código no interior else
não é manipulado pelo precedente except
.
Python try…finally
The try
statement in Python can have an optional finally
clause. Esta cláusula é executada não importa o quê, e é geralmente utilizada para libertar recursos externos.
Por exemplo, podemos estar ligados a um centro de dados remoto através da rede ou trabalhando com um ficheiro ou uma Interface Gráfica de Utilizador (GUI).
Em todas estas circunstâncias, temos de limpar o recurso antes de o programa parar, quer tenha sido executado com sucesso ou não. Estas acções (fechar um ficheiro, GUI ou desligar da rede) são executadas na cláusula finally
para garantir a execução.
Aqui está um exemplo de operações de ficheiro para ilustrar isto.
try: f = open("test.txt",encoding = 'utf-8') # perform file operationsfinally: f.close()
Este tipo de construção assegura que o ficheiro é fechado mesmo que ocorra uma excepção durante a execução do programa.