Tratamento de erros e exceções no Python com try/except

Cansado de programar?

Cansado(a) de quebrar a cabeça para aprender a programar Python de verdade?

Conheça a melhor e mais completa formação de Python e Django e sinta-se um programador verdadeiramente competente. Além de Python e Django, você também vai aprender Banco de Dados, SQL, HTML, CSS, Javascript, Bootstrap e muito mais!

Quero aprender Python e Django de Verdade! Quero aprender!
Suporte

Tire suas dúvidas diretamente com o professor

Suporte

Projetos práticos voltados para o mercado de trabalho

Suporte

Formação moderna com foco na prática profissional

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? :worried:

Ou quem nunca fez uma conversão de tipos de maneira incorreta e teve um ValueError sendo lançado? :persevere:

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! :coffee:

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? :thumbsup:

Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?

Sua assinatura não pôde ser validada.
Você fez sua assinatura com sucesso.

Assine as PyDicas e receba 30 dias do melhor conteúdo Python na sua Caixa de Entrada: direto e sem enrolação!

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! :point_down:

Jornada Python Jornada Python

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 :wink:

#newsletter Olá :wave: Curtiu o artigo? Então faça parte da nossa Newsletter! Privacidade Não se preocupe, respeitamos sua privacidade. Você pode se descadastrar a qualquer momento.