Levantando Exceções e Criando Exceções Personalizadas
Levantando Exceções com a Instrução raise
Em alguns casos, é necessário levantar manualmente uma exceção específica. Para isso, usamos a instrução raise. Abaixo está um exemplo de como levantar uma exceção personalizada:
try:
age = int(input("Digite a idade: "))
if age > 110 or age < 1:
raise Exception("Idade inválida")
print("Sua idade:", age)
except ValueError:
print("Dados fornecidos são inválidos")
except Exception as e:
print(e)
print("Programa finalizado")
A instrução raise
BaseException
Exception
raise
except
Exception
Exemplo de execução:
Digite a idade: 100500 Idade inválida Programa finalizado
Criando Tipos de Exceções Personalizadas
No Python, não estamos limitados apenas aos tipos de exceções integrados. Podemos, por meio de herança, criar nossos próprios tipos de exceção quando necessário. Vejamos o exemplo da classe Person
class Person:
def __init__(self, name, age):
self.__name = name
self.__age = age
def display_info(self):
print(f"Nome: {self.__name} Idade: {self.__age}")
Aqui, a classe Person
__name
__age
O código a seguir implementa essa ideia:
class PersonAgeException(Exception):
def __init__(self, age, min_age, max_age):
self.age = age
self.min_age = min_age
self.max_age = max_age
def __str__(self):
return (f"Valor inválido: {self.age}. "
f"A idade deve estar entre {self.min_age} e {self.max_age}")
class Person:
def __init__(self, name, age):
self.__name = name # define o nome
min_age, max_age = 1, 110
if min_age < age < max_age: # define a idade se o valor for válido
self.__age = age
else: # caso contrário, levanta uma exceção
raise PersonAgeException(age, min_age, max_age)
def display_info(self):
print(f"Nome: {self.__name} Idade: {self.__age}")
try:
tom = Person("Tom", 37)
tom.display_info() # Nome: Tom Idade: 37
bob = Person("Bob", -23)
bob.display_info()
except PersonAgeException as e:
print(e) # Valor inválido: -23. A idade deve estar entre 1 e 110
Neste exemplo, a classe PersonAgeException
Exception
PersonAgeException
No método __str__
Dentro do construtor da classe Person
PersonAgeException
raise PersonAgeException(age, min_age, max_age)
Ao utilizar a classe Person
try..except
try:
tom = Person("Tom", 37)
tom.display_info() # Nome: Tom Idade: 37
bob = Person("Bob", -23) # levanta a exceção PersonAgeException
bob.display_info()
except PersonAgeException as e:
print(e) # Valor inválido: -23. A idade deve estar entre 1 e 110
Assim, se o construtor de Person
PersonAgeException
except