2010-10-13 39 views
42

Điều gì đó đang xảy ra với một trong các biến mẫu của lớp học của tôi. Tôi muốn biến biến thành một thuộc tính, và bất cứ khi nào nó được truy cập, tôi muốn in ra dấu vết ngăn xếp của tất cả các mã dẫn đến điểm đó, vì vậy tôi có thể thấy nó bị sai lệch ở đâu. Làm cách nào để in ra dấu vết ngăn xếp khi không có ngoại lệ nào được nâng lên? Tôi biết nếu có một ngoại lệ tôi có thể làm một cái gì đó như traceback.format_tb(sys.exc_info()[2]).in dấu vết ngăn xếp python mà không có ngoại lệ được nâng lên

Ngoài ra những gì có thể hữu ích là chỉ in 3-4 cấp độ cuối cùng, vì số đầu tiên có thể sẽ không thú vị.

Trả lời

64

traceback.print_stack():

>>> def f(): 
... def g(): 
...  traceback.print_stack() 
... g() 
... 
>>> f() 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 4, in f 
    File "<stdin>", line 3, in g 

Chỉnh sửa: Bạn cũng có thể sử dụng extract_stack, phải mất một lát (ví dụ stack[5:] cho loại trừ 5 cấp độ đầu tiên) và sử dụng format_list để có được một stacktrace in-ready ('\n'.join(traceback.format_list(...)))

+1

Cảm ơn bạn đã chỉnh sửa, nó đã giúp tôi với [câu trả lời này] (http://stackoverflow.com/a/16589622/321973) cho một hàm 'full_stack()' rất chung chung! –

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