Lançar Exceções Personalizadas
Às vezes, você precisa sinalizar uma condição de erro que não é uma exceção nativa do Python. Você pode fazer isso com a instrução raise, que permite criar e disparar suas próprias exceções. Isso é útil para tornar o tratamento de erros da sua aplicação mais específico e descritivo.
Primeiro, vamos ver como usar raise para uma exceção nativa. No WebIDE, abra o arquivo ~/project/raise_exception.py e adicione o seguinte código:
def check_positive(number):
if number <= 0:
raise ValueError("Input must be a positive number")
print(f"The number {number} is positive.")
try:
check_positive(-5)
except ValueError as e:
print(f"Caught an exception: {e}")
try:
check_positive(10)
except ValueError as e:
print(f"Caught an exception: {e}")
Salve o arquivo e execute-o a partir do terminal:
python ~/project/raise_exception.py
A saída será:
Caught an exception: Input must be a positive number
The number 10 is positive.
Aqui, a função check_positive levanta um ValueError se a entrada não for positiva, o que é então capturado pelo bloco except.
Agora, vamos definir e levantar uma exceção personalizada (custom exception). Exceções personalizadas são classes que herdam da classe Exception nativa.
No WebIDE, abra o arquivo ~/project/custom_exception.py e adicione o seguinte código:
class NegativeNumberError(Exception):
"""Custom exception raised for negative numbers."""
pass
def process_positive_number(number):
if number < 0:
raise NegativeNumberError("Negative numbers are not allowed")
print(f"Processing positive number: {number}")
try:
process_positive_number(-10)
except NegativeNumberError as e:
print(f"Caught custom exception: {e}")
try:
process_positive_number(20)
except NegativeNumberError as e:
print(f"Caught custom exception: {e}")
Salve o arquivo e execute-o a partir do terminal:
python ~/project/custom_exception.py
A saída será:
Caught custom exception: Negative numbers are not allowed
Processing positive number: 20
Neste exemplo, definimos nossa própria NegativeNumberError e a levantamos sob uma condição específica. O bloco try...except então captura especificamente este tipo de erro personalizado, tornando o tratamento de erros mais preciso.