Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> python

Exceções personalizadas do Python

Exceções personalizadas do Python


Neste tutorial, você aprenderá como definir exceções personalizadas dependendo de seus requisitos com a ajuda de exemplos.

Python tem inúmeras exceções internas que forçam seu programa a gerar um erro quando algo no programa dá errado.

No entanto, às vezes você pode precisar criar suas próprias exceções personalizadas que atendam ao seu propósito.


Criando exceções personalizadas


Em Python, os usuários podem definir exceções personalizadas criando uma nova classe. Essa classe de exceção deve ser derivada, direta ou indiretamente, do Exception integrado classe. A maioria das exceções internas também são derivadas dessa classe.
>>> class CustomError(Exception):
...     pass
...

>>> raise CustomError
Traceback (most recent call last):
...
__main__.CustomError

>>> raise CustomError("An error occurred")
Traceback (most recent call last):
...
__main__.CustomError: An error occurred

Aqui, criamos uma exceção definida pelo usuário chamada CustomError que herda do Exception classe. Esta nova exceção, como outras exceções, pode ser gerada usando o raise instrução com uma mensagem de erro opcional.

Quando estamos desenvolvendo um programa Python grande, é uma boa prática colocar todas as exceções definidas pelo usuário que nosso programa gera em um arquivo separado. Muitos módulos padrão fazem isso. Eles definem suas exceções separadamente como exceptions.py ou errors.py (geralmente, mas nem sempre).

A classe de exceção definida pelo usuário pode implementar tudo o que uma classe normal pode fazer, mas geralmente as tornamos simples e concisas. A maioria das implementações declara uma classe base personalizada e deriva outras classes de exceção dessa classe base. Esse conceito fica mais claro no exemplo a seguir.

Exemplo:exceção definida pelo usuário em Python


Neste exemplo, ilustraremos como exceções definidas pelo usuário podem ser usadas em um programa para gerar e detectar erros.

Este programa pedirá ao usuário para inserir um número até que ele adivinhe um número armazenado corretamente. Para ajudá-los a descobrir, é fornecida uma dica se o palpite é maior ou menor que o número armazenado.
# define Python user-defined exceptions
class Error(Exception):
    """Base class for other exceptions"""
    pass


class ValueTooSmallError(Error):
    """Raised when the input value is too small"""
    pass


class ValueTooLargeError(Error):
    """Raised when the input value is too large"""
    pass


# you need to guess this number
number = 10

# user guesses a number until he/she gets it right
while True:
    try:
        i_num = int(input("Enter a number: "))
        if i_num < number:
            raise ValueTooSmallError
        elif i_num > number:
            raise ValueTooLargeError
        break
    except ValueTooSmallError:
        print("This value is too small, try again!")
        print()
    except ValueTooLargeError:
        print("This value is too large, try again!")
        print()

print("Congratulations! You guessed it correctly.")

Aqui está um exemplo de execução deste programa.
Enter a number: 12
This value is too large, try again!

Enter a number: 0
This value is too small, try again!

Enter a number: 8
This value is too small, try again!

Enter a number: 10
Congratulations! You guessed it correctly.

Definimos uma classe base chamada Error .

As outras duas exceções (ValueTooSmallError e ValueTooLargeError ) que são realmente gerados pelo nosso programa são derivados dessa classe. Essa é a maneira padrão de definir exceções definidas pelo usuário na programação Python, mas você não está limitado apenas a essa forma.

Personalizando classes de exceção


Podemos personalizar ainda mais essa classe para aceitar outros argumentos conforme nossas necessidades.

Para aprender a personalizar as classes Exception, você precisa ter o conhecimento básico de programação orientada a objetos.

Visite Programação Orientada a Objetos Python para começar a aprender sobre programação Orientada a Objetos em Python.



Vejamos um exemplo:
class SalaryNotInRangeError(Exception):
    """Exception raised for errors in the input salary.

    Attributes:
        salary -- input salary which caused the error
        message -- explanation of the error
    """

    def __init__(self, salary, message="Salary is not in (5000, 15000) range"):
        self.salary = salary
        self.message = message
        super().__init__(self.message)


salary = int(input("Enter salary amount: "))
if not 5000 < salary < 15000:
    raise SalaryNotInRangeError(salary)

Saída
Enter salary amount: 2000
Traceback (most recent call last):
  File "<string>", line 17, in <module>
    raise SalaryNotInRangeError(salary)
__main__.SalaryNotInRangeError: Salary is not in (5000, 15000) range

Aqui, sobrescrevemos o construtor do Exception class para aceitar nossos próprios argumentos personalizados salary e message . Então, o construtor do pai Exception classe é chamada manualmente com o self.message argumento usando super() .

O self.salary personalizado atributo é definido para ser usado posteriormente.

O __str__ herdado método do Exception class é usado para exibir a mensagem correspondente quando SalaryNotInRangeError é levantada.

Também podemos personalizar o __str__ próprio método substituindo-o.
class SalaryNotInRangeError(Exception):
    """Exception raised for errors in the input salary.

    Attributes:
        salary -- input salary which caused the error
        message -- explanation of the error
    """

    def __init__(self, salary, message="Salary is not in (5000, 15000) range"):
        self.salary = salary
        self.message = message
        super().__init__(self.message)

    def __str__(self):
        return f'{self.salary} -> {self.message}'


salary = int(input("Enter salary amount: "))
if not 5000 < salary < 15000:
    raise SalaryNotInRangeError(salary)

Saída
Enter salary amount: 2000
Traceback (most recent call last):
  File "/home/bsoyuj/Desktop/Untitled-1.py", line 20, in <module>
    raise SalaryNotInRangeError(salary)
__main__.SalaryNotInRangeError: 2000 -> Salary is not in (5000, 15000) range


Para saber mais sobre como lidar com exceções em Python, visite Python Exception Handling.

python

  1. Tipos de dados Python
  2. Operadores Python
  3. Instrução de passagem do Python
  4. Argumentos da função Python
  5. Dicionário Python
  6. Erros do Python e exceções incorporadas
  7. Programação Orientada a Objetos Python
  8. Herança Python
  9. Iteradores Python
  10. type() e isinstance() em Python com exemplos