Exceções definidas pelo usuário em Python com exemplos

Exceções definidas pelo usuário em Python com exemplos

Exceções definidas pelo usuário são criadas definindo uma nova classe que herda de Exceção integrada do Python classe ou uma de suas subclasses. Ao fazer isso, podemos criar mensagens de erro personalizadas e lidar com erros específicos de uma forma que faça sentido para nosso aplicativo.

Etapas para criar e usar exceções definidas pelo usuário

Siga estas etapas para criar e usar exceções definidas pelo usuário em Python:

  • Defina uma nova classe de exceção: Crie uma nova classe que herda de Exception ou de qualquer uma de suas subclasses.
  • Levante a exceção: Use a instrução raise para gerar a exceção definida pelo usuário quando ocorrer uma condição específica.
  • Lidar com a exceção: Use blocos try-except para lidar com a exceção definida pelo usuário.

Exemplo: Neste exemplo, criamos uma exceção personalizada InvalidAgeError para garantir que os valores de idade estejam dentro de um intervalo válido (0–120).

Python
   # Step 1: Define a custom exception class   class   InvalidAgeError  (  Exception  ):   def   __init__  (  self     age     msg  =  'Age must be between 0 and 120'  ):   self  .  age   =   age   self  .  msg   =   msg   super  ()  .  __init__  (  self  .  msg  )   def   __str__  (  self  ):   return   f  '  {  self  .  age  }   ->   {  self  .  msg  }  '   # Step 2: Use the custom exception in your code   def   set_age  (  age  ):   if   age    <   0   or   age   >   120  :   raise   InvalidAgeError  (  age  )   else  :   print  (  f  'Age set to:   {  age  }  '  )   # Step 3: Handling the custom exception   try  :   set_age  (  150  )   # This will raise the custom exception   except   InvalidAgeError   as   e  :   print  (  e  )   

Saída
150 -> Age must be between 0 and 120  

Explicação:

  • A classe InvalidAgeError herda de Exception. Ele define um __quente__ método para aceitar idade e mensagem.
  • O método __str__ retorna uma representação de string legível do erro.
  • Em set_age() se a idade estiver fora do intervalo válido (0–120), a exceção será levantada.
  • O bloco try-except captura a exceção e imprime a mensagem de erro.

Personalizando classes de exceção

Quando criamos uma exceção personalizada, criamos uma subclasse da classe Exception integrada do Python (ou uma subclasse como ValueError TypeError etc.). Podemos então adicionar nossos próprios métodos de atributos ou lógica personalizada para tornar nossa exceção mais informativa.

Também podemos aprimorar exceções personalizadas adicionando atributos extras ou substituindo métodos.

Exemplo: Aqui melhoramos o InvalidAgeError adicionando um código de erro e personalizando a mensagem de erro.

Python
   class   InvalidAgeError  (  Exception  ):   def   __init__  (  self     age     msg  =  'Age must be between 0 and 120'     error_code  =  1001  ):   self  .  age   =   age   self  .  msg   =   msg   self  .  error_code   =   error_code   super  ()  .  __init__  (  self  .  msg  )   def   __str__  (  self  ):   return   f  '[Error Code   {  self  .  error_code  }  ]   {  self  .  age  }   ->   {  self  .  msg  }  '   try  :   set_age  (  150  )   # This will raise the custom exception   except   InvalidAgeError   as   e  :   print  (  e  )   

Saída
[Error Code 1001] 150 -> Age must be between 0 and 120  

Explicação:

  • InvalidAgeError agora possui um atributo adicional error_code.
  • O método __str__ é substituído para exibir o código de erro e a idade.
  • Quando set_age(150) é executado, a exceção é levantada e capturada no bloco try-except.
  • A mensagem de erro personalizada é impressa tornando o erro mais descritivo.

Usando exceções padrão como classe base

Às vezes, em vez de herdar diretamente de Exception, podemos criar uma exceção personalizada subclassificando uma exceção padrão, como RuntimeError ValueError etc. Isso é útil quando sua exceção personalizada deve ser tratada como um tipo específico de erro.

Exemplo: Este exemplo mostra como criar uma exceção personalizada NetworkError herdando de RuntimeError, que é uma exceção integrada padrão.

Python
   # NetworkError has base RuntimeError and not Exception   class   NetworkError  (  RuntimeError  ):   def   __init__  (  self     arg  ):   self  .  args   =   (  arg  )   # store as tuple   try  :   raise   NetworkError  (  'Connection failed'  )   except   NetworkError   as   e  :   print  (  e  .  args  )   

Saída
('Connection failed')  

Explicação:

  • NetworkError herda de RuntimeError, que é um tipo de exceção integrado.
  • Quando gerada, a mensagem é armazenada no atributo args como uma tupla.
  • A exceção é capturada e seus argumentos armazenados são exibidos.

Exemplo do mundo real: erro de e-mail inválido

Aqui está um exemplo simples onde levantamos uma exceção personalizada se o endereço de e-mail não for válido:

Python
   class   InvalidEmailError  (  Exception  ):   def   __init__  (  self     email     msg  =  'Invalid email format'  ):   self  .  email   =   email   self  .  msg   =   msg   super  ()  .  __init__  (  self  .  msg  )   def   __str__  (  self  ):   return   f  '  {  self  .  email  }   ->   {  self  .  msg  }  '   def   set_email  (  email  ):   if   '@'   not   in   email  :   raise   InvalidEmailError  (  email  )   print  (  f  'Email set to:   {  email  }  '  )   try  :   set_email  (  'userexample.com'  )   except   InvalidEmailError   as   e  :   print  (  e  )   

Saída
userexample.com -> Invalid email format  

Explicação:

  • Uma nova classe de exceção InvalidEmailError é definida para validar endereços de e-mail.
  • Se o e-mail fornecido não contiver '@' a exceção será gerada.
  • O bloco try-except detecta o erro e imprime a mensagem formatada.

Quando usar exceções definidas pelo usuário?

As exceções definidas pelo usuário devem ser consideradas nos seguintes cenários:

  • Representando erros específicos em um aplicativo (por exemplo, InvalidAgeError DatabaseConnectionError).
  • Fornecendo mensagens de erro mais claras e descritivas.
  • Lidar com um grupo de erros relacionados separadamente usando exceto.

Ao usar exceções definidas pelo usuário, os programas tornam-se mais legíveis, de manutenção e mais fáceis de depurar.

Questionário sugerido Editar questionário 3 perguntas

O que acontece se uma exceção definida pelo usuário herdar RuntimeError em vez de Exception?

  • UM

    Não pode ser capturado usando exceto

  • B

    Torna-se uma exceção não verificada

  • C

    É tratado como um erro relacionado ao tempo de execução pelos manipuladores

  • D

    Perde atributos personalizados

Explicação:

Herdar de RuntimeError permite que ele seja tratado como um erro de tempo de execução e também como um erro personalizado.

Por que super().__init__(self.msg) é comumente usado em classes de exceção personalizadas?

  • UM

    Para evitar herança múltipla

  • B

    Para inicializar corretamente a classe base Exception

  • C

    Para substituir o traceback

  • D

    Para aumentar automaticamente a exceção

Explicação:

Chamar super() garante que a exceção base seja inicializada corretamente com a mensagem.

O que será impresso se uma exceção personalizada substituir __str__() e for impressa dentro de exceto?

  • UM

    A representação de string substituída

  • B

    Endereço de memória da exceção

  • C

    Somente o nome da classe

  • D

    Nada, a menos que repr() seja usado

Explicação:

print(e) chama __str__() do objeto de exceção.

Exceções definidas pelo usuário em Python com exemplosQuestionário concluído com sucesso Sua pontuação:   2 /3 Precisão :  0% Faça login para ver a explicação 1 /3 1 /3 < Previous Próximo>