Salve salve Pythonistas!
Nem sempre os programas que desenvolvemos fazem aquilo que queremos, não é mesmo?
Quem nunca supôs que determinada função iria retornar um dado de certo tipo, e se surpreendeu quando viu que o tipo de retorno era outro? ![]()
Ou quem nunca fez uma conversão de tipos de maneira incorreta e teve um ValueError sendo lançado? ![]()
Por esses e outros motivos que devemos sempre tratar as exceções, programando de forma defensiva em Python!
E para isso, utilizamos o bloco try/except.
Na verdade, é o bloco try/except/else/finally.
Mas calma que veremos tudo nesse post!
Então sem enrolação, já prepara o café e bora nessa! ![]()
Vá direto ao assunto…
O tratamento de exceções no Python
O bloco básico de código que realiza o tratamento de exceções no Python é feito da seguinte forma:
1
2
3
4
5
6
7
8
9
10
11
try:
# Bloco de código a ser executado
except {exceção}:
# Código que será executado caso a {exceção} seja capturada
else:
# Código que será executado caso nenhuma exceção tenha sido lançada ou capturada
finally:
# Código que será executado independente se alguma exceção for capturada ou não
Apenas as cláusulas try e except são obrigatórias, sendo else e finally opcionais!
Podemos ter múltiplas cláusulas except, capturando Exceções diferentes.
Mas vamos primeiro aos exemplos para facilitar seu entendimento!
Está curtindo esse conteúdo? ![]()
Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?
Exemplos de utilização
Suponha que você queira abrir um arquivo e caso ele não exista, seu programa irá criá-lo.
Uma forma de fazer isso seria:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
nome_arquivo = 'nome_arquivo.txt'
try:
arquivo = open(nome_arquivo, 'r')
except FileNotFoundError:
arquivo = open(nome_arquivo, 'a')
else:
print(f"Arquivo {nome_arquivo} já existe")
finally:
# Realiza algum processamento no arquivo
processa_arquivo(arquivo)
# Fecha o arquivo
arquivo.close()
Dessa forma, caso o arquivo não exista, uma exceção FileNotFoundError será lançada e será capturada na cláusula except.
Ali dentro, a função open com o parâmetro “a” (de “append”) será chamada, criando então o arquivo.
Em seguida, temos a cláusula finally, que será executada independentemente de uma exceção ter sido lançada ou não.
Como se trata de um arquivo, é sempre aconselhado realizar seu fechamento, e um bom lugar para fazer isso é dentro do finally.
E antes de continuarmos: você sabia que temos um módulo inteiro sobre tratamento de erros e exceções na Jornada Python - nosso curso completão? Dá uma conferida no link abaixo!
Capturando múltiplas exceções
Podemos capturar múltiplas exceções de duas formas:
A primeira, com múltiplas cláusulas except, assim:
1
2
3
4
5
6
7
8
9
10
try:
dividendo = int(input("Digite o dividendo: "))
divisor = int(input("Digite o divisor: "))
resultado = dividendo/divisor
except ValueError:
print("Numero digitado inválido")
except ZeroDivisionError:
print("Divisão por zero não permitida")
Assim, caso o erro ValueError seja lançado, este será capturado pelo primeiro except.
E caso haja uma divisão por zero, a exceção ZeroDivisionError será lançada e capturada pelo segundo except.
Podemos também agrupar exceções! Dessa forma, o mesmo tratamento será dado independente de qual exceção tenha sido lançado, dessa forma:
1
2
3
4
5
6
7
try:
dividendo = int(input("Digite o dividendo: "))
divisor = int(input("Digite o divisor: "))
resultado = dividendo/divisor
except(ZeroDivisionError, ValueError):
print("Erro de conversão ou divisor igual à zero")
Viu como é fácil tratar erros e exceções no Python?!
Agora você não tem mais desculpa para programar da maneira correta!
Conclusão
Nesse post você viu como pode fazer o tratamento de erros e exceções no Python com o bloco try/except e ainda como utilizar as cláusulas else e finally!
Programar de maneira defensiva - capturando e tratando os erros dos programas que desenvolve - é algo que você precisa passar a fazer para progredir como Dev Python!
Espero que tenha curtido esse conteúdo e nos vemos na próxima ![]()
"Porque o Senhor dá a sabedoria, e da sua boca vem a inteligência e o entendimento" Pv 2:6