2010-07-29 29 views
5

Làm thế nào tôi có thể nhận được dấu vết ngăn xếp đầy đủ từ chính đối tượng Ngoại lệ?Làm cách nào để nhận được dấu vết ngăn xếp từ một đối tượng ngoại lệ bằng Python?

Xét đoạn mã sau khi giảm ví dụ về các vấn đề:

last_exception = None 
try: 
    raise Exception('foo failed') 
except Exception as e: 
    last_exception = e 
# this happens somewhere else, decoupled from the original raise 
print_exception_stack_trace(last_exception) 
+0

có thể trùng lặp của [Làm thế nào bạn có thể kiểm tra dấu vết ngăn xếp của một ngoại lệ trong Python?] (Http://stackoverflow.com/questions/2359248/how-can-you-inspect-the-stack-trace-of- một ngoại lệ-trong-python) –

+1

Vâng, vâng, nhưng câu hỏi đó không phải là (thỏa đáng) trả lời! – katrielalex

Trả lời

2

Edit: Tôi đã nói dối, xin lỗi. e.__traceback__ là những gì bạn muốn.

try: 
    raise ValueError 
except ValueError as e: 
    print(e.__traceback__) 

>c:/python31/pythonw -u "test.py" 
<traceback object at 0x00C964B8> 
>Exit code: 0 

Đây là only valid trong Python 3; bạn không thể làm điều đó trong các phiên bản trước đó.

+0

đây không phải là từ các đối tượng ngoại lệ chính nó nhưng từ bên trong dấu vết thực hiện ngoại lệ được ném vào. – camillobruni

+0

Không, trong Python 3 nó dường như ... Tôi chỉ cố gắng này và nó hoạt động! – katrielalex

+1

@katrielalex, làm cách nào tôi làm điều này trong Python 2.7, tôi không thể tìm thấy nó. Cảm ơn. – Kamilski81

Các vấn đề liên quan