exception Criando manualmente (jogando) uma exceção em Python





2 Answers

NÃO FAÇA ISSO . Criar uma Exception nua não é absolutamente a coisa certa a fazer; veja share lugar.

Não pode ficar muito mais pythonic do que isso:

raise Exception("I know python!")

Veja os documentos da instrução raise para python se você quiser mais informações.

python exception exception-handling

Como posso gerar uma exceção no Python para que ela possa ser capturada posteriormente por meio de um bloco except ?




No Python3 existem 4 sintaxes diferentes para exceções do rasing:

1. raise exception 
2. raise exception (args) 
3. raise
4. raise exception (args) from original_exception

1. raise exception vs. 2. raise exception (args)

Se você usar raise exception (args) para gerar uma exceção, então os args serão impressos quando você imprimir o objeto de exceção - como mostrado no exemplo abaixo.

  #raise exception (args)
    try:
        raise ValueError("I have raised an Exception")
    except ValueError as exp:
        print ("Error", exp)     # Output -> Error I have raised an Exception 



  #raise execption 
    try:
        raise ValueError
    except ValueError as exp:
        print ("Error", exp)     # Output -> Error 

3.raise

instrução raise sem nenhum argumento re-levanta a última exceção. Isso é útil se você precisar realizar algumas ações depois de capturar a exceção e, em seguida, desejar aumentá-la novamente. Mas se não houve nenhuma exceção antes, a instrução raise gera exceção TypeError .

def somefunction():
    print("some cleaning")

a=10
b=0 
result=None

try:
    result=a/b
    print(result)

except Exception:            #Output ->
    somefunction()           #some cleaning
    raise                    #Traceback (most recent call last):
                             #File "python", line 8, in <module>
                             #ZeroDivisionError: division by zero

4. raise exception (args) de original_exception

Essa instrução é usada para criar o encadeamento de exceções, no qual uma exceção levantada em resposta a outra exceção pode conter os detalhes da exceção original - conforme mostrado no exemplo abaixo.

class MyCustomException(Exception):
pass

a=10
b=0 
reuslt=None
try:
    try:
        result=a/b

    except ZeroDivisionError as exp:
        print("ZeroDivisionError -- ",exp)
        raise MyCustomException("Zero Division ") from exp

except MyCustomException as exp:
        print("MyException",exp)
        print(exp.__cause__)

Saída:

ZeroDivisionError --  division by zero
MyException Zero Division 
division by zero



Related