Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> python

Manipulação de Exceções do Python Usando a instrução try, except e finally

Tratamento de Exceções do Python Usando a instrução try, except e finally


Neste tutorial, você aprenderá a lidar com exceções em seu programa Python usando as instruções try, except e finally com a ajuda de exemplos.

Vídeo:Manipulação de exceção do Python (try..except..finally)

Exceções em Python


Python tem muitas exceções internas que são levantadas quando seu programa encontra um erro (algo no programa dá errado).

Quando essas exceções ocorrem, o interpretador Python interrompe o processo atual e o passa para o processo de chamada até que seja tratado. Se não for tratado, o programa irá travar.

Por exemplo, vamos considerar 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 exceção na função C mas não é tratado em C , a exceção passa para B e depois para A .

Se nunca for tratado, uma mensagem de erro é exibida e nosso programa para de repente e inesperadamente.

Capturando exceções em Python


Em Python, exceções podem ser tratadas usando um try declaração.

A operação crítica que pode gerar uma exceção é colocada dentro do try cláusula. O código que trata as exceções está escrito no except cláusula.

Podemos, assim, escolher quais operações executar uma vez que capturamos a exceção. Aqui está um exemplo simples.
# import module sys to get the type of exception
import sys

randomList = ['a', 0, 2]

for entry in randomList:
    try:
        print("The entry is", entry)
        r = 1/int(entry)
        break
    except:
        print("Oops!", sys.exc_info()[0], "occurred.")
        print("Next entry.")
        print()
print("The reciprocal of", entry, "is", r)

Saída
The entry is a
Oops! <class 'ValueError'> occurred.
Next entry.

The entry is 0
Oops! <class 'ZeroDivisionError'> occured.
Next entry.

The entry is 2
The reciprocal of 2 is 0.5

Neste programa, percorremos os valores da randomList Lista. Como mencionado anteriormente, a parte que pode causar uma exceção é colocada dentro do try quadra.

Se nenhuma exceção ocorrer, o except bloco é ignorado e o fluxo normal continua (para o último valor). Mas se ocorrer alguma exceção, ela será capturada pelo except bloco (primeiro e segundo valores).

Aqui, imprimimos o nome da exceção usando o exc_info() função dentro de sys módulo. Podemos ver que a causa ValueError e 0 causa ZeroDivisionError .



Como todas as exceções em Python herdam da base Exception classe, também podemos executar a tarefa acima da seguinte maneira:
# import module sys to get the type of exception
import sys

randomList = ['a', 0, 2]

for entry in randomList:
    try:
        print("The entry is", entry)
        r = 1/int(entry)
        break
    except Exception as e:
        print("Oops!", e.__class__, "occurred.")
        print("Next entry.")
        print()
print("The reciprocal of", entry, "is", r)

Este programa tem a mesma saída que o programa acima.

Capturando exceções específicas em Python


No exemplo acima, não mencionamos nenhuma exceção específica no except cláusula.

Esta não é uma boa prática de programação, pois captura todas as exceções e trata todos os casos da mesma maneira. Podemos especificar quais exceções um except cláusula deve pegar.

Um try cláusula pode ter qualquer número de except cláusulas para tratar diferentes exceções, no entanto, apenas uma será executada caso ocorra uma exceção.

Podemos usar uma tupla de valores para especificar várias exceções em uma cláusula except. Aqui está um exemplo de pseudocódigo.
try:
   # do something
   pass

except ValueError:
   # handle ValueError exception
   pass

except (TypeError, ZeroDivisionError):
   # handle multiple exceptions
   # TypeError and ZeroDivisionError
   pass

except:
   # handle all other exceptions
   pass

Criando exceções em Python


Na programação Python, exceções são geradas quando ocorrem erros em tempo de execução. Também podemos gerar exceções manualmente usando o raise palavra-chave.

Opcionalmente, podemos passar valores para a exceção para esclarecer por que essa exceção foi gerada.
>>> raise KeyboardInterrupt
Traceback (most recent call last):
...
KeyboardInterrupt

>>> raise MemoryError("This is an argument")
Traceback (most recent call last):
...
MemoryError: This is an argument

>>> try:
...     a = int(input("Enter a positive integer: "))
...     if a <= 0:
...         raise ValueError("That is not a positive number!")
... except ValueError as ve:
...     print(ve)
...    
Enter a positive integer: -2
That is not a positive number!

Python tente com cláusula else


Em algumas situações, você pode querer executar um determinado bloco de código se o bloco de código dentro de try funcionou sem erros. Para esses casos, você pode usar o opcional else palavra-chave com o try declaração.

Observação :Exceções na cláusula else não são tratadas pelas cláusulas except anteriores.

Vejamos um exemplo:
# program to print the reciprocal of even numbers

try:
    num = int(input("Enter a number: "))
    assert num % 2 == 0
except:
    print("Not an even number!")
else:
    reciprocal = 1/num
    print(reciprocal)

Saída

Se passarmos um número ímpar:
Enter a number: 1
Not an even number!

Se passarmos um número par, o recíproco é calculado e exibido.
Enter a number: 4
0.25

No entanto, se passarmos 0, obteremos ZeroDivisionError como o bloco de código dentro de else não é tratado pelo except anterior .
Enter a number: 0
Traceback (most recent call last):
  File "<string>", line 7, in <module>
    reciprocal = 1/num
ZeroDivisionError: division by zero

Python tente...finalmente


O try instrução em Python pode ter um opcional finally cláusula. Esta cláusula é executada não importa o que aconteça e geralmente é usada para liberar recursos externos.

Por exemplo, podemos estar conectados a um data center remoto através da rede ou trabalhando com um arquivo ou uma Interface Gráfica de Usuário (GUI).

Em todas essas circunstâncias, devemos limpar o recurso antes que o programa seja interrompido, seja ele executado com êxito ou não. Essas ações (fechar um arquivo, GUI ou desconectar da rede) são executadas no finally cláusula para garantir a execução.

Aqui está um exemplo de operações de arquivo para ilustrar isso.
try:
   f = open("test.txt",encoding = 'utf-8')
   # perform file operations
finally:
   f.close()

Esse tipo de construção garante que o arquivo seja fechado mesmo que ocorra uma exceção durante a execução do programa.

python

  1. Palavras-chave e identificadores do Python
  2. Declaração Python, Recuo e Comentários
  3. Variáveis, constantes e literais do Python
  4. Conversão de tipo Python e conversão de tipo
  5. Entrada, Saída e Importação do Python
  6. Instrução de passagem do Python
  7. Variáveis ​​globais, locais e não locais do Python
  8. Gerenciamento de diretórios e arquivos Python
  9. Manipulação de Exceções do Python Usando a instrução try, except e finally
  10. Sensor de temperatura Python e Raspberry Pi