Resumo : neste tutorial, você aprenderá como gerar exceções usando a raise
instrução Python.
Introdução à instrução raise do Python
Para gerar uma exceção , você usa a raise
instrução:
raise ExceptionType()
Linguagem de código: Python ( python )
Deve ExceptionType()
ser uma subclasse da BaseException
classe. Normalmente, é uma subclasse da Exception
classe. Observe que the ExceptionType
não precisa ser herdado diretamente da Exception
classe. Ele pode herdar indiretamente de uma classe que é uma subclasse da classe Exception.
A BaseException
classe possui o __init__
método que aceita um *args
argumento. Isso significa que você pode passar qualquer número de argumentos para o objeto de exceção ao gerar uma exceção.
O exemplo a seguir usa a raise
instrução para gerar uma ValueError
exceção. Ele passa três argumentos para o ValueError
__init__
método:
try:
raise ValueError('The value error exception', 'x', 'y')
except ValueError as ex:
print(ex.args)
Linguagem de código: Python ( python )
Saída:
('The value error exception', 'x', 'y')
Linguagem de código: texto simples ( texto simples )
Recriar a exceção atual
Às vezes, você deseja registrar uma exceção e gerar a mesma exceção novamente. Nesse caso, você pode usar a raise
instrução sem especificar o objeto de exceção.
Por exemplo, o seguinte define uma division()
função que retorna a divisão de dois números:
def division(a, b):
try:
return a / b
except ZeroDivisionError as ex:
print('Logging exception:', str(ex))
raise
Linguagem de código: Python ( python )
Se você passar zero para o segundo argumento da division()
função, ZeroDivisionError
ocorrerá a exceção. No entanto, em vez de tratar a exceção, você pode registrá-la e aumentá-la novamente.
Observe que você não precisa especificar o objeto de exceção na raise
instrução. Neste caso, Python sabe que a raise
instrução irá gerar a exceção atual que foi capturada pela except
cláusula.
O código a seguir causa uma ZeroDivisionError
exceção:
division(1, 0)
Linguagem de código: Python ( python )
E você verá a mensagem de registro e a exceção na saída:
Logging exception: division by zero
Traceback (most recent call last):
File "c:/pythontutorial/app.py", line 9, in <module>
division(1, 0)
File "C:/pythontutorial/app.py", line 3, in division
return a / b
ZeroDivisionError: division by zero
Linguagem de código: texto simples ( texto simples )
Levantar outra exceção durante o tratamento de uma exceção
Ao lidar com uma exceção, você pode querer gerar outra exceção. Por exemplo:
def division(a, b):
try:
return a / b
except ZeroDivisionError as ex:
raise ValueError('b must not zero')
Linguagem de código: Python ( python )
Na division()
função, levantamos uma ValueError
exceção se isso ZeroDivisionError
ocorrer.
Se você executar o código a seguir, obterá os detalhes do rastreamento de pilha:
division(1, 0)
Linguagem de código: Python ( python )
Saída:
Traceback (most recent call last):
File "C:/pythontutorial/app.py", line 3, in division
return a / b
ZeroDivisionError: division by zero
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/pythontutorial/app.py", line 8, in <module>
division(1, 0)
File "C:/pythontutorial/app.py", line 5, in division
raise ValueError('b must not zero')
ValueError: b must not zero
Linguagem de código: texto simples ( texto simples )
Primeiro, ZeroDivisionError
ocorre a exceção:
Traceback (most recent call last):
File "C:/pythontutorial/app.py", line 3, in division
return a / b
ZeroDivisionError: division by zero
Linguagem de código: texto simples ( texto simples )
Segundo, durante o tratamento da ZeroDivisionError
exceção, a ValueError
exceção ocorre:
Traceback (most recent call last):
File "C:/pythontutorial/app.py", line 8, in <module>
division(1, 0)
File "C:/pythontutorial/app.py", line 5, in division
raise ValueError('b must not zero')
ValueError: b must not zero
Linguagem de código: texto simples ( texto simples )
Resumo
- Use a
raise
instrução Python para gerar uma exceção. - Ao lidar com exceções, você pode gerar a mesma ou outra exceção.