[python] 파이썬에서 수동으로 예외를 발생시키는 (throwing) 경우


Answers

이 작업을 수행하지 마십시오 . 벌거 벗은 Exception 제기하는 것은 절대적으로 옳은 일이 아닙니다 . 대신 share 을보십시오.

이보다 훨씬 더 파이썬적일 수는 없다.

raise Exception("I know python!")

자세한 정보를 원하면 python 의 raise 문 docs 를 참조하십시오.

Question

파이썬에서 예외를 발생시켜 나중에 except 블록을 통해 포착 할 수 있습니까?




Python3에는 예외를 rasing하기위한 4 가지 구문이 있습니다.

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

1. 예외 대 발생 2. 예외 발생 (args)

raise exception (args) 를 사용하여 예외를 발생 시키면 아래 예제와 같이 예외 객체를 인쇄 할 때 args 가 인쇄됩니다.

  #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 문을 사용하면 마지막 예외가 다시 발생합니다. 예외를 포착 한 후 일부 조치를 수행 한 후 예외를 다시 제기해야하는 경우에 유용합니다. 그러나 예외가 없으면 raise 문은 TypeError Exception을 발생시킵니다.

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. original_exception에서 예외 (args)를 발생시킵니다.

이 문은 다른 예외에 대한 응답으로 발생하는 예외에 아래 예제와 같이 원래 예외의 세부 정보가 포함될 수있는 예외 체인을 만드는 데 사용됩니다.

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__)

산출:

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



Related