2016-07-28 6 views
0

파이썬 프로그램에서 예외가 발생하면 예외 처리기가 예외가 발생한 개체를 식별 할 수있는 방법이 있습니까?Python : 예외 클래스가 그것을 발생시킨 객체를 식별 할 수 있습니까?

하지 않으면, 내가 이런 예외 클래스를 정의하여 찾을 수 있다고 생각

...

class FoobarException(Exception) : 
    def __init__(self,message,context) : 
     ... 

...이처럼 사용 :

raise FoobarException("Something bad happened!", self) 

내가 차라리 그러나 모든 예외에 "자아"를 전달할 필요는 없습니다.

+0

참조 : http://stackoverflow.com/questions/1497683/can-python-determine-the-class-of-a-object-accessing-a-method/1497768#1497768 AND : http : // stackoverflow. com/questions/7272326/introspect-calling-object – jmunsch

답변

0

예외 자체가 스택의 어디에 있는지 알아 내고 싶다면 빨리 지저분 해집니다. 당신은 당신이 그것을 소유하는 클래스를 찾고 있지 않은 경우는 예외가 제기 된 함수 나 방법을 찾고 있다면

import inspect 
frameinfo = inspect.getframeinfo(inspect.stack()[1][0]) 
caller_name = frameinfo[2] 
file_name = frameinfo[0] 

이를, 단, 정말 작동합니다 : 당신이 뭔가를 할 수 있습니다.

는이 같은 일을 아마 더 낫다 :

class MyException(Exception): 
    pass 

# ... somewhere inside a class 
    raise MyException("Something bad happened in {}".format(self.__class__)) 

당신도 당신의 Exception 서브 클래스에 대한 처리 코드를 작성하지 않아도 그런 식으로.

+0

정보를 제공해 주셔서 감사합니다. 그러나 해결책은 문제보다 심각합니다. "가능하지만 현명한 방법이 아닙니다!" 나는 제안 된 대체 접근법을 시도했다. 그것은 충분히 잘 작동하고, 나는 계속 나아갈거야. –

+0

그래, 나는 동의한다. 이런 코드를 실제로 사용하고자하는 경우는 매우 드뭅니다. :) –

관련 문제