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

Disparando Exceções

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.

2
Tarefa
Python SELF PT,  nível 18lição 0
Bloqueado
Lançamento de exceção padrão
Lançamento de exceção padrão
2
Tarefa
Python SELF PT,  nível 18lição 0
Bloqueado
Reembalagem de exceção
Reembalagem de exceção
Comentários
  • Populares
  • Novas
  • Antigas
Você precisa acessar para deixar um comentário
Esta página ainda não tem nenhum comentário