Resumo : neste tutorial, você aprenderá como definir classes de exceção personalizadas em Python.
Introdução à exceção personalizada do Python
Para criar uma classe de exceção personalizada , você define uma classe que herda da classe interna Exception
ou de uma de suas subclasses, como ValueError
class:
O exemplo a seguir define uma CustomException
classe que herda da Exception
classe:
class CustomException(Exception):
""" my custom exception class """
Linguagem de código: Python ( python )
Observe que a CustomException
classe possui uma docstring que se comporta como uma instrução. Portanto, você não precisa adicionar a pass
instrução para tornar a sintaxe válida.
Para gerar CustomException, você usa a raise
instrução. Por exemplo, o seguinte usa a raise
instrução para aumentar o CustomException
:
class CustomException(Exception):
""" my custom exception class """
try:
raise CustomException('This is my custom exception')
except CustomException as ex:
print(ex)
Linguagem de código: Python ( python )
Saída:
This is my custom exception
Linguagem de código: Python ( python )
Assim como as classes de exceção padrão, as exceções personalizadas também são classes. Portanto, você pode adicionar funcionalidades às classes de exceção personalizadas, como:
- Adicionando atributos e propriedades .
- Adicionar métodos , por exemplo, registrar a exceção, formatar a saída, etc.
- Substituindo os métodos
__str__
e__repr__
- E fazendo qualquer outra coisa que você possa fazer com aulas regulares.
Na prática, você desejará manter as exceções personalizadas organizadas criando uma hierarquia de exceções personalizadas. A hierarquia de exceções personalizada permite capturar exceções em vários níveis, como as classes de exceção padrão.
Exemplo de exceção personalizada Python
Suponha que você precise desenvolver um programa que converta uma temperatura de Fahrenheit para Celsius.
Os valores mínimo e máximo de uma temperatura em Fahrenheit são 32 e 212. Se os usuários inserirem um valor que não esteja nesta faixa, você desejará gerar uma exceção personalizada, por exemplo, FahrenheitError
.
Defina a classe de exceção personalizada FahrenheitError
O seguinte define a FahrenheitError
classe de exceção:
class FahrenheitError(Exception):
min_f = 32
max_f = 212
def __init__(self, f, *args):
super().__init__(args)
self.f = f
def __str__(self):
return f'The {self.f} is not in a valid range {self.min_f, self.max_f}'
Linguagem de código: Python ( python )
Como funciona.
- Primeiro, defina a classe FahrenheitError que herda da
Exception
classe. - Em segundo lugar, adicione dois atributos de classe
min_f
quemax_f
representam os valores Fahrenheit mínimo e máximo. - Terceiro, defina o
__init__
método que aceita um valor Fahrenheit (f
) e vários argumentos de posição (*args
). No__init__
método, chame o__init__
método da classe base. Além disso, atribua of
argumento aof
atributo de instância. - Finalmente, substitua o
__str__
método para retornar uma representação de string personalizada da instância da classe.
Defina a função fahrenheit_to_celsius
O seguinte define a fahrenheit_to_celsius
função que aceita uma temperatura em Fahrenheit e retorna uma temperatura em Celsius:
def fahrenheit_to_celsius(f: float) -> float:
if f < FahrenheitError.min_f or f > FahrenheitError.max_f:
raise FahrenheitError(f)
return (f - 32) * 5 / 9
Linguagem de código: Python ( python )
A fahrenheit_to_celsius
função gera a FahrenheitError
exceção se a temperatura de entrada não estiver na faixa válida. Caso contrário, ele converte a temperatura de Fahrenheit para Celsius.
Crie o programa principal
O programa principal a seguir usa a fahrenheit_to_celsius
função e a FahrenheitError
classe de exceção personalizada:
if __name__ == '__main__':
f = input('Enter a temperature in Fahrenheit:')
try:
f = float(f)
except ValueError as ex:
print(ex)
else:
try:
c = fahrenheit_to_celsius(float(f))
except FahrenheitError as ex:
print(ex)
else:
print(f'{f} Fahrenheit = {c:.4f} Celsius')
Linguagem de código: Python ( python )
Como funciona.
Primeiro, solicite aos usuários a temperatura em Fahrenheit.
f = input('Enter a temperature in Fahrenheit:')
Linguagem de código: Python ( python )
Segundo, converta o valor de entrada em float . Se float()
não for possível converter o valor de entrada, o programa gerará uma ValueError
exceção. Neste caso, exibe a mensagem de erro da ValueError
exceção:
try:
f = float(f)
# ...
except ValueError as ex:
print(ex)
Linguagem de código: Python ( python )
Terceiro, converta a temperatura para Celsius chamando a fahrenheit_to_celsius
função e imprima a mensagem de erro se o valor de entrada não for válido Fahrenheit
:
try:
c = fahrenheit_to_celsius(float(f))
except FahrenheitError as ex:
print(ex)
else:
print(f'{f} Fahrenheit = {c:.4f} Celsius')
Linguagem de código: Python ( python )
Junte tudo
class FahrenheitError(Exception):
min_f = 32
max_f = 212
def __init__(self, f, *args):
super().__init__(args)
self.f = f
def __str__(self):
return f'The {self.f} is not in a valid range {self.min_f, self.max_f}'
def fahrenheit_to_celsius(f: float) -> float:
if f < FahrenheitError.min_f or f > FahrenheitError.max_f:
raise FahrenheitError(f)
return (f - 32) * 5 / 9
if __name__ == '__main__':
f = input('Enter a temperature in Fahrenheit:')
try:
f = float(f)
except ValueError as ex:
print(ex)
else:
try:
c = fahrenheit_to_celsius(float(f))
except FahrenheitError as ex:
print(ex)
else:
print(f'{f} Fahrenheit = {c:.4f} Celsius')
Linguagem de código: Python ( python )
Resumo
- Subclasse a
Exception
classe ou uma de suas subclasses para definir uma classe de exceção personalizada. - Crie uma hierarquia de classes de exceção para tornar as classes de exceção mais organizadas e capturar exceções em vários níveis.