2017-03-06 3 views
0

파이썬에서 함수 A가 함수 B를 호출하고 함수 B가 함수 C를 호출하고 함수 C가 ValueError를 던집니다 (예를 들어) 함수 A가 ValueError를 던질 수 있도록 오류가 호출 스택을 확장합니까? 예를 들어 함수 A의 함수 C에서 값 오류를 잡을 수 있습니까?파이썬 예외가 호출 스택을 올라 갔습니까?

또한 함수 C에서만 정의 된 고유 한 Exception을 작성하면 함수 A가 동일한 오류를 발생시킬 수 있도록 호출 스택도 올라갈 수 있습니까?

+7

시도해 보셨습니까? –

+2

여기 물어 본 것은 당신이 스스로 확인할 수있는 간단한 것입니다. – itzMEonTV

+0

예외 개념이 스택 위로 전달되지 않고 어떻게 작동하는지 궁금합니다. –

답변

1

함수 A가 ValueError를 던질 수 있도록 오류가 호출 스택을 확장합니까?

시도해 보겠습니다.

def a(): 
    try: 
     b() 
    except ValueError: 
     print("Caught a value error in `a`.") 

def b(): 
    c() 

def c(): 
    raise ValueError 

a() 

결과 : 오류가 길 호출 스택을 만드는 것처럼

Caught a value error in `a`. 

네는 보인다.

함수 C에서만 정의 된 예외를 만들면 함수 A가 동일한 오류를 발생시킬 수 있도록 호출 스택도 올라갈 수 있습니까?

시도해 보겠습니다.

def a(): 
    try: 
     b() 
    except: 
     print("Caught some kind of exception in `a`.") 

def b(): 
    c() 

def c(): 
    class MyCustomException(Exception): 
     pass 
    raise MyCustomException 

a() 

결과 :

Caught some kind of exception in `a`. 

네는, 사용자 정의 예외도 자신의 길 호출 스택을합니다. 하지만 에서 except MyCustomException:을 수행 할 수 없으므로 그 이름은 c에만 존재합니다. 이러한 이유로 실제적인 경우 전역 클래스에서 클래스를 선언하십시오.

관련 문제