Atualizado: 04/11/2024

Tratando Diferentes Tipos de Exceções

Em Python, podemos tratar diferentes tipos de exceções de maneira específica. Para isso, podemos utilizar a estrutura try...except com um tipo específico de exceção para tratar, informando-o após a palavra except:

try:
    number = int(input("Digite um número: "))
    print("Número digitado:", number)
except ValueError:
    print("Conversão falhou")
print("Fim do programa")

Neste caso, o bloco except lida apenas com exceções do tipo ValueError, que ocorrem ao falhar na conversão de uma string em número.

Python possui os seguintes tipos básicos de exceções:

  • BaseException: tipo base para todas as exceções embutidas.

  • Exception: tipo base geralmente utilizado para criar exceções personalizadas.

  • ArithmeticError: tipo base para exceções relacionadas a operações aritméticas (como OverflowError, ZeroDivisionError e FloatingPointError).

  • BufferError: ocorre quando uma operação de buffer não pode ser realizada.

  • LookupError: tipo base para exceções relacionadas a índices ou chaves inválidas em coleções (como IndexError e KeyError).

Esses tipos de exceções são a base para tipos de exceções mais específicos. Python tem uma ampla lista de exceções embutidas, disponível na documentação oficial. Abaixo, listamos algumas das mais comuns:

  • IndexError: ocorre quando um índice está fora do intervalo permitido para uma coleção.

  • KeyError: ocorre quando uma chave não é encontrada em um dicionário.

  • OverflowError: ocorre quando o resultado de uma operação aritmética não pode ser representado pelo tipo numérico atual (geralmente do tipo float).

  • RecursionError: ocorre quando o limite máximo de recursão é excedido.

  • TypeError: ocorre quando uma operação ou função é aplicada a um valor de tipo inadequado.

  • ValueError: ocorre quando uma operação ou função recebe um objeto do tipo correto, mas com um valor inválido.

  • ZeroDivisionError: ocorre ao tentar dividir por zero.

  • NotImplementedError: indica que certos métodos de uma classe ainda não foram implementados.

  • ModuleNotFoundError: ocorre quando não é possível encontrar um módulo ao tentar importá-lo.

  • OSError: ocorre em erros de sistema, como a falta de um arquivo ou o esgotamento de memória no disco.

Caso a situação seja tal que a execução do programa possa lançar diferentes tipos de exceções, podemos tratá-las separadamente, usando expressões except adicionais. Ao ocorrer uma exceção, Python procura o bloco except correspondente para tratá-la:

try:
    number1 = int(input("Digite o primeiro número: "))
    number2 = int(input("Digite o segundo número: "))
    print("Resultado da divisão:", number1/number2)
except ValueError:
    print("Conversão falhou")
except ZeroDivisionError:
    print("Tentativa de divisão por zero")
except BaseException:
    print("Exceção geral")
print("Fim do programa")

Neste exemplo, tratamos exceções do tipo ValueError, ZeroDivisionError e BaseException. Caso ocorra uma exceção que não seja do tipo ValueError ou ZeroDivisionError, o bloco BaseException será executado.

Entretanto, se surgir uma exceção que não tenha um bloco except correspondente, o programa não conseguirá tratá-la, resultando em uma falha. Veja o exemplo a seguir:

try:
    number1 = int(input("Digite o primeiro número: "))
    number2 = int(input("Digite o segundo número: "))
    print("Resultado da divisão:", number1/number2)
except ZeroDivisionError:
    print("Tentativa de divisão por zero")
print("Fim do programa")

Neste caso, apenas a divisão por zero é tratada. Caso o usuário digite uma string que não possa ser convertida para número, ocorrerá uma exceção ValueError, que não será capturada, e o programa encerrará abruptamente.

Python também permite que múltiplos tipos de exceções sejam tratados em um único bloco except, usando parênteses:

try:
    number1 = int(input("Digite o primeiro número: "))
    number2 = int(input("Digite o segundo número: "))
    print("Resultado da divisão:", number1/number2)
except (ZeroDivisionError, ValueError):  # tratamento de ZeroDivisionError e ValueError
    print("Divisão por zero ou entrada incorreta")
print("Fim do programa")

Obtendo informações sobre a exceção

Podemos obter mais informações sobre uma exceção passando-a para uma variável com o operador as, para uso no bloco except:

try:
    number = int(input("Digite um número: "))
    print("Número digitado:", number)
except ValueError as e:
    print("Informações sobre a exceção:", e)
print("Fim do programa")

Exemplo de entrada incorreta:

Digite um número: abc
Informações sobre a exceção: invalid literal for int() with base 10: 'abc'
Fim do programa
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