2016-10-27 9 views
0

자바로 프로그래밍 한 경험으로, 코드가 잘못되었을 때 생성되는 스택 트레이스가 상당히 좋아졌지만 파이썬으로 생성 된 트레이스가 약간 부족하다고 생각합니다. 예를 들어, 자바의 추적은 다음과 같습니다파이썬에서 스택 추적과 같은 자바를 생성하는 방법은 무엇입니까?

java.lang.RuntimeException 
    at test.package.Example.c(Example.java:20) 
    at test.package.Example.b(Example.java:15) 
    at test.package.Example.a(Example.java:10) 

을 파이썬 추적은 다음과 같을 수있는 반면 이러한 흔적을 모두 기본적으로 같은 정보를 전달하는 동안

Traceback (most recent call last): 
    File "example.py", line 10, in <module> 
    a() 
    File "example.py", line 2, in a 
    b() 
    File "example.py", line 5, in b 
    c() 
    File "example.py", line 8, in c 
    raise Exception 
Exception 

, 나는 개인적으로 찾기 자바에서 추적 쉽게 따라야합니다.

파이썬이 스택 추적을 인쇄하는 데 사용하는 형식을 변경하는 방법이 있습니까, 아니면 내 프로그램의 루트에 사용자 정의 예외 처리기를 만들 필요가 있습니까?

+0

특히 파이썬 포맷에 대해 (맘에 들지 않는) 무엇을하고 싶습니까? Python 형식이 Java 형식보다 * 많은 * 정보를 제공하는 것처럼 보입니다. 문제가되는 코드 행의 실제 내용을 보여주기 때문입니다. – BrenBarn

+0

@BrenBarn 내가 필요로하는 것보다 더 많은 정보를 제공하는 것 같아. 더 큰 프로그램을 작성할 때 때때로 스택 추적에 15 개 이상의 항목이있을 수 있으며 콘솔에 15 개의 추가 행이 있으면 문제가있는 곳을 정확히 파악하는 것이 훨씬 어려워집니다. 필자는 코드를 열어서 스스로 볼 수 있기 때문에 줄 번호를 갖는 것으로 충분하다고 생각합니다. 컨텍스트를 빼앗긴 한 줄의 코드를 갖는 것이 유용하지 않습니다. –

답변

1

파이썬이 스택 트레이스를 포맷하는 데 사용하는 형식을 변경하는 수단이 있습니다를 사용하고 그 대신 자신 만의 포맷을 쓰기 때문이다. 기본 제공 형식은 하나뿐입니다.

자신의 기능을 sys.excepthook에 할당 할 수 있으며 예외가 발생하지 않고 프로그램을 종료하려고하는 예외에 대한 액세스 권한을 얻는 최상위 예외 처리기 역할을합니다. 여기서 트레이스 백 객체를 사용하여 원하는대로 형식을 지정할 수 있습니다. Triptych의 대답은 traceback 모듈을 사용하여 각 스택 프레임에 대한 정보를 얻는 방법을 보여줍니다. extract_tb은 잘못된 줄의 파일 이름, 줄 번호, 함수 및 소스 텍스트의 4 개 튜플을 반환하므로 소스 텍스트를 표시하지 않으려면 나머지를 연결하고 나머지는 연결하면됩니다. 그러나 당신이보고 싶은 출력을 구성하는 작업을해야 할 것입니다.

3

traceback 모듈

import traceback 
try: 
    x= 1/0 
except Exception as e: 
    print(e) 
    traceback.print_exc()