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
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
ValueError
Python possui os seguintes tipos básicos de exceções:
: tipo base para todas as exceções embutidas.BaseException
: tipo base geralmente utilizado para criar exceções personalizadas.Exception
: tipo base para exceções relacionadas a operações aritméticas (como OverflowError, ZeroDivisionError e FloatingPointError).ArithmeticError
: ocorre quando uma operação de buffer não pode ser realizada.BufferError
: tipo base para exceções relacionadas a índices ou chaves inválidas em coleções (como IndexError e KeyError).LookupError
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:
: ocorre quando um índice está fora do intervalo permitido para uma coleção.IndexError
: ocorre quando uma chave não é encontrada em um dicionário.KeyError
: ocorre quando o resultado de uma operação aritmética não pode ser representado pelo tipo numérico atual (geralmente do tipoOverflowError
).float
: ocorre quando o limite máximo de recursão é excedido.RecursionError
: ocorre quando uma operação ou função é aplicada a um valor de tipo inadequado.TypeError
: ocorre quando uma operação ou função recebe um objeto do tipo correto, mas com um valor inválido.ValueError
: ocorre ao tentar dividir por zero.ZeroDivisionError
: indica que certos métodos de uma classe ainda não foram implementados.NotImplementedError
: ocorre quando não é possível encontrar um módulo ao tentar importá-lo.ModuleNotFoundError
: ocorre em erros de sistema, como a falta de um arquivo ou o esgotamento de memória no disco.OSError
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
except
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
BaseException
ValueError
ZeroDivisionError
BaseException
Entretanto, se surgir uma exceção que não tenha um bloco except
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
Python também permite que múltiplos tipos de exceções sejam tratados em um único bloco except
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
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