6.1 Disparo intencional de exceções
Em Python, você pode disparar exceções intencionalmente usando
o comando raise
. Isso permite que você sinalize um erro ou
uma situação inadequada no seu programa. Vamos ver
várias maneiras de usar o comando raise
e
reaproveitar exceções.
Disparo de exceções padrão
O sintaxe geral dessa operação é a seguinte:
raise exceção
Você pode disparar exceções padrão como Exception
,
TypeError
e outras, passando as mensagens apropriadas.
Exemplo: raise Exception
def check_number(value):
if value < 0:
raise Exception("Desculpe, não são permitidos números abaixo de zero")
try:
check_number(-5)
except Exception as e:
print(f"Exceção capturada: {e}")
Neste exemplo, se o valor for menor que zero, é disparada
uma Exception
com a mensagem "Desculpe, não são permitidos números abaixo de zero"
.
Exemplo: raise TypeError
def check_integer(value):
if not isinstance(value, int):
raise TypeError("Apenas inteiros são permitidos")
try:
check_integer("string")
except TypeError as e:
print(f"Exceção capturada: {e}")
Neste exemplo, se o valor não for um número inteiro, é disparada
uma TypeError
com a mensagem "Apenas inteiros são permitidos"
.
6.2 Reempacotamento de exceções
Às vezes é necessário capturar uma exceção e disparar outra,
fornecendo uma informação mais específica ou útil. Isso pode ser
feito com
o comando raise
... from
, que mantém a exceção original como causa da nova.
O sintaxe geral dessa operação é a seguinte:
raise nova_exceção from exceção_antiga
Exemplo: Reempacotamento de exceção
class EmptyVariableError(Exception):
pass
def check_non_empty(value):
if value == "":
raise ValueError("A variável está vazia")
try:
check_non_empty("")
except ValueError as e:
raise EmptyVariableError("Variável vazia detectada") from e
Neste exemplo, se o valor da variável estiver vazio, primeiro é disparada
uma ValueError
com a mensagem "A variável está vazia"
.
Essa exceção é então capturada e uma nova exceção
EmptyVariableError
é disparada com a mensagem "Variável vazia
detectada"
, enquanto a exceção original é passada usando
from
.
6.3 Análise de exceções reempacotadas
Usar o comando
raise
... from
permite
preservar a informação sobre a cadeia de exceções, o que pode ser útil
para depuração. Você pode analisar exceções reempacotadas e suas
causas.
Exemplo de análise de exceções reempacotadas:
class EmptyVariableError(Exception):
pass
def check_non_empty(value):
if value == "":
raise ValueError("A variável está vazia")
try:
check_non_empty("")
except ValueError as e:
raise EmptyVariableError("Variável vazia detectada") from e
Executar o código acima resultará na seguinte saída:
Traceback (most recent call last):
File "example.py", line 8, in
check_non_empty("")
File "example.py", line 5, in check_non_empty
raise ValueError("A variável está vazia")
ValueError: A variável está vazia
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "example.py", line 10, in
raise EmptyVariableError("Variável vazia detectada") from e
EmptyVariableError: Variável vazia detectada
A primeira erro (marcada em verde)
é o erro original, que ocorreu em algum lugar profundo do código. Às vezes, esses erros acontecem de vez em quando, e isso é um comportamento normal do programa.
A segunda erro (marcada em azul)
é um erro de nível mais alto. Seu programa ou framework deve saber como lidar com isso. Mas se você quiser investigar mais a fundo e entender as causas do erro, é aí que o erro verde será útil.
Tudo é feito de forma muito sensata.
GO TO FULL VERSION