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