2014-07-18 2 views
0

나는 파이썬에 초보자입니다. 파이썬에서 표준 출력 **에 메시지가 인쇄 된 ** 사용자 정의 예외 **을 발생시키는 방법을 알고 있습니다. 하지만 여러 모듈과 긴 코드를 처리 할 때 메시지로 예외를 발생시키면서 도 추적 할 수 있습니까? 내가 추적으로 의미했던 것은 에러 라인을 얻거나, 예외가 발생한 곳의 함수와 모듈 이름이다. 내가 제공하는 메시지를 세부 정보를 추가하는 방식으로 수정할 수 있음을 알고 있습니다. 그러나 나는 이것을하는 inbuilt 방법이 있는지 궁금 해서요.파이썬에서는 어떻게 커스텀 예외를 발생시키고 추적을 다시 할 수 있습니까?

+0

사용자 정의 예외에서 모듈 및 기능을 인쇄 하시겠습니까? – Nilesh

+0

아마도 https://docs.python.org/3/library/traceback.html과 같은 것을 원할 것입니까? – Evert

답변

2

추적을 "생성"할 필요가 없습니다. 예외 (사용자 정의 또는 내장)를 생성 할 때 파이썬이이를 처리합니다.

Python 2.7.3 (default, Feb 27 2014, 19:58:35) 
[GCC 4.6.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
pythonrc start 
pythonrc done 
>>> class MyException(Exception): pass 
... 
>>> def foo(): 
...  raise MyException("Hey") 
... 
>>> def bar(): 
... print "in bar" 
... foo() 
... 
>>> bar() 
in bar 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 3, in bar 
    File "<stdin>", line 2, in foo 
__main__.MyException: Hey 
>>> 
-1

이 질문은 이미 여기에 답한다 :

글렌 메이 나드에서이 응답을 인용 :

그것은 간단합니다; raise에 세 번째 인수로 추적을 전달하십시오.

import sys 
class MyException(Exception): pass 

try: 
    raise TypeError("test") 
except TypeError, e: 
    raise MyException(), None, sys.exc_info()[2] 

예외를 catch하고 다른 예외를 다시 제기 할 때 항상 수행하십시오.

+0

이것은 중복 질문을 처리하는 적절한 방법이 아닙니다. 가까운 표를 던지려면 3k의 담당자가 필요하지만 질문에 플래그를 지정하고 속임수에 대한 링크가 포함 된 설명을 추가 할 담당자가 이미 있습니다. – jonrsharpe