Atualizado: 04/11/2024

try...except...finally

Ao programar em Python, podemos encontrar dois tipos de erros principais. O primeiro tipo é composto pelos erros de sintaxe (syntax errors), que surgem quando há alguma violação das regras de sintaxe da linguagem ao escrever o código. Quando trabalhamos em um ambiente de desenvolvimento integrado (IDE), como o PyCharm, a própria IDE pode detectar esses erros de sintaxe e destacá-los de alguma forma.

O segundo tipo de erro é o erro de execução (runtime error), que ocorre durante a execução do programa. Esses erros também são chamados de exceções. Vejamos um exemplo com a conversão de uma string para um número:

string = "5"
number = int(string)
print(number)

Esse código será executado sem problemas, pois a string "5" pode ser convertida em um número. No entanto, observe o próximo exemplo:

string = "hello"
number = int(string)
print(number)

Ao executar esse código, será lançada uma exceção ValueError, pois a string "hello" não pode ser convertida em um número:

ValueError: invalid literal for int() with base 10: 'hello'

Aqui, é evidente que "hello" não é um número, mas podemos lidar com entradas de usuário, que podem não ser exatamente o que esperamos:

string = input("Digite um número: ")
number = int(string)
print(number)

Caso ocorra uma exceção, a execução do programa é interrompida. Para evitar esse comportamento e tratar exceções em Python, utilizamos a estrutura try...except.

try...except

A estrutura try...except é definida da seguinte forma:

try:
    # instruções
except [Tipo_de_Exceção]:
    # instruções

Todo o código principal, onde pode ocorrer uma exceção, é colocado após a palavra-chave try. Se uma exceção é gerada nesse bloco, a execução é interrompida e o fluxo passa para o bloco except.

Após except, podemos opcionalmente especificar o tipo de exceção que será tratada (por exemplo, ValueError ou KeyError). Abaixo do except, são colocadas as instruções que serão executadas em caso de exceção.

Vamos ver um exemplo com o tratamento de exceção ao converter uma string em um número:

try:
    number = int(input("Digite um número: "))
    print("Número digitado:", number)
except:
    print("Falha na conversão")
print("Programa finalizado")

Ao inserir uma string:

Digite um número: hello
Falha na conversão
Programa finalizado

Como se vê na saída do console, ao inserir uma string, a conversão falha e o fluxo é transferido para o bloco except.

Ao inserir um número válido:

Digite um número: 22
Número digitado: 22
Programa finalizado

Agora, tudo funciona normalmente, sem exceções, então o bloco except não é executado.

Bloco finally

Ao tratar exceções, também é possível utilizar o bloco opcional finally. A principal característica desse bloco é que ele é executado independentemente de a exceção ter ocorrido ou não:

try:
    number = int(input("Digite um número: "))
    print("Número digitado:", number)
except:
    print("Falha na conversão")
finally:
    print("Programa finalizado")

Normalmente, o bloco finally é utilizado para liberar recursos utilizados, como o fechamento de arquivos.

Vale destacar que o bloco finally não trata exceções. Se usarmos apenas o finally sem o bloco except, uma exceção que ocorra fará o programa ser encerrado de forma abrupta, como no exemplo a seguir com uma divisão por zero:

try:
    number = 3/0  # lança a exceção ZeroDivisionError
    print(number)
finally:
    print("Programa finalizado")

Ao executar esse código, a exceção ZeroDivisionError será gerada e o programa será encerrado abruptamente, sem executar o bloco finally.

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com