CodeGym /Cursos /Python SELF PT /Disparando Exceções

Disparando Exceções

Python SELF PT
Nível 18 , Lição 0
Disponível

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.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION