Hướng dẫn stack trace python - dấu vết ngăn xếp python
Mã nguồn: lib/traceback.py Lib/traceback.py Show
Mô -đun này cung cấp một giao diện tiêu chuẩn để trích xuất, định dạng và in dấu vết ngăn xếp của các chương trình Python. Nó chính xác bắt chước hành vi của trình thông dịch Python khi nó in một dấu vết ngăn xếp. Điều này rất hữu ích khi bạn muốn in các dấu vết ngăn xếp dưới điều khiển chương trình, chẳng hạn như trong một trình bao bọc trên mạng xung quanh trình thông dịch. Mô -đun sử dụng các đối tượng Traceback - đây là loại đối tượng được lưu trữ trong biến Mô -đun xác định các chức năng sau: Traceback.print_tb (TB, LEDE = none, file = none) ¶print_tb(tb, limit=None, file=None)¶In lên để giới hạn các mục nhập dấu vết từ TB đối tượng Traceback (bắt đầu từ khung người gọi) nếu giới hạn là dương. Nếu không, in các mục import sys, traceback def lumberjack(): bright_side_of_life() def bright_side_of_life(): return tuple()[0] try: lumberjack() except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info() print("*** print_tb:") traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print("*** print_exception:") traceback.print_exception(exc_value, limit=2, file=sys.stdout) print("*** print_exc:") traceback.print_exc(limit=2, file=sys.stdout) print("*** format_exc, first and last line:") formatted_lines = traceback.format_exc().splitlines() print(formatted_lines[0]) print(formatted_lines[-1]) print("*** format_exception:") print(repr(traceback.format_exception(exc_value))) print("*** extract_tb:") print(repr(traceback.extract_tb(exc_traceback))) print("*** format_tb:") print(repr(traceback.format_tb(exc_traceback))) print("*** tb_lineno:", exc_traceback.tb_lineno)0; Nếu không, nó phải là một tệp mở hoặc đối tượng giống như tệp để nhận đầu ra. Đã thay đổi trong phiên bản 3.5: Đã thêm hỗ trợ giới hạn âm.Added negative limit support. Traceback.print_exception (exc, /, [value, tb,] giới hạn = none, file = none, chuỗi = true)print_exception(exc, /, [value, tb, ]limit=None, file=None, chain=True)¶In thông tin ngoại lệ và ngăn xếp các mục nhập từ TB đối tượng Traceback sang tệp. Điều này khác với import sys, traceback def lumberjack(): bright_side_of_life() def bright_side_of_life(): return tuple()[0] try: lumberjack() except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info() print("*** print_tb:") traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print("*** print_exception:") traceback.print_exception(exc_value, limit=2, file=sys.stdout) print("*** print_exc:") traceback.print_exc(limit=2, file=sys.stdout) print("*** format_exc, first and last line:") formatted_lines = traceback.format_exc().splitlines() print(formatted_lines[0]) print(formatted_lines[-1]) print("*** format_exception:") print(repr(traceback.format_exception(exc_value))) print("*** extract_tb:") print(repr(traceback.extract_tb(exc_traceback))) print("*** format_tb:") print(repr(traceback.format_tb(exc_traceback))) print("*** tb_lineno:", exc_traceback.tb_lineno)1 theo những cách sau:
Vì Python 3.10, thay vì chuyển giá trị và bệnh lao, một đối tượng ngoại lệ có thể được truyền làm đối số đầu tiên. Nếu giá trị và bệnh lao được cung cấp, đối số đầu tiên bị bỏ qua để cung cấp khả năng tương thích ngược. Đối số giới hạn tùy chọn có ý nghĩa tương tự như đối với import sys, traceback def lumberjack(): bright_side_of_life() def bright_side_of_life(): return tuple()[0] try: lumberjack() except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info() print("*** print_tb:") traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print("*** print_exception:") traceback.print_exception(exc_value, limit=2, file=sys.stdout) print("*** print_exc:") traceback.print_exc(limit=2, file=sys.stdout) print("*** format_exc, first and last line:") formatted_lines = traceback.format_exc().splitlines() print(formatted_lines[0]) print(formatted_lines[-1]) print("*** format_exception:") print(repr(traceback.format_exception(exc_value))) print("*** extract_tb:") print(repr(traceback.extract_tb(exc_traceback))) print("*** format_tb:") print(repr(traceback.format_tb(exc_traceback))) print("*** tb_lineno:", exc_traceback.tb_lineno)1. Nếu chuỗi là đúng (mặc định), thì các ngoại lệ được xích (thuộc tính import sys, traceback def lumberjack(): bright_side_of_life() def bright_side_of_life(): return tuple()[0] try: lumberjack() except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info() print("*** print_tb:") traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print("*** print_exception:") traceback.print_exception(exc_value, limit=2, file=sys.stdout) print("*** print_exc:") traceback.print_exc(limit=2, file=sys.stdout) print("*** format_exc, first and last line:") formatted_lines = traceback.format_exc().splitlines() print(formatted_lines[0]) print(formatted_lines[-1]) print("*** format_exception:") print(repr(traceback.format_exception(exc_value))) print("*** extract_tb:") print(repr(traceback.extract_tb(exc_traceback))) print("*** format_tb:") print(repr(traceback.format_tb(exc_traceback))) print("*** tb_lineno:", exc_traceback.tb_lineno)6 hoặc import sys, traceback def lumberjack(): bright_side_of_life() def bright_side_of_life(): return tuple()[0] try: lumberjack() except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info() print("*** print_tb:") traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print("*** print_exception:") traceback.print_exception(exc_value, limit=2, file=sys.stdout) print("*** print_exc:") traceback.print_exc(limit=2, file=sys.stdout) print("*** format_exc, first and last line:") formatted_lines = traceback.format_exc().splitlines() print(formatted_lines[0]) print(formatted_lines[-1]) print("*** format_exception:") print(repr(traceback.format_exception(exc_value))) print("*** extract_tb:") print(repr(traceback.extract_tb(exc_traceback))) print("*** format_tb:") print(repr(traceback.format_tb(exc_traceback))) print("*** tb_lineno:", exc_traceback.tb_lineno)7 của ngoại lệ) cũng sẽ được in, giống như bản thân trình thông dịch khi in một ngoại lệ chưa được xử lý. Thay đổi trong phiên bản 3.5: Đối số ETYPE bị bỏ qua và suy ra từ loại giá trị.The etype argument is ignored and inferred from the type of value. Đã thay đổi trong phiên bản 3.10: Tham số ETYPE đã được đổi tên thành Exc và hiện chỉ có vị trí.The etype parameter has been renamed to exc and is now positional-only. Traceback.print_exc (giới hạn = none, file = none, chuỗi = true) ¶print_exc(limit=None, file=None, chain=True)¶Đây là một tốc ký cho import sys, traceback def lumberjack(): bright_side_of_life() def bright_side_of_life(): return tuple()[0] try: lumberjack() except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info() print("*** print_tb:") traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print("*** print_exception:") traceback.print_exception(exc_value, limit=2, file=sys.stdout) print("*** print_exc:") traceback.print_exc(limit=2, file=sys.stdout) print("*** format_exc, first and last line:") formatted_lines = traceback.format_exc().splitlines() print(formatted_lines[0]) print(formatted_lines[-1]) print("*** format_exception:") print(repr(traceback.format_exception(exc_value))) print("*** extract_tb:") print(repr(traceback.extract_tb(exc_traceback))) print("*** format_tb:") print(repr(traceback.format_tb(exc_traceback))) print("*** tb_lineno:", exc_traceback.tb_lineno)8. Traceback.print_last (giới hạn = none, file = none, chuỗi = true) ¶print_last(limit=None, file=None, chain=True)¶ Đây là một tốc ký cho import sys, traceback def lumberjack(): bright_side_of_life() def bright_side_of_life(): return tuple()[0] try: lumberjack() except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info() print("*** print_tb:") traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print("*** print_exception:") traceback.print_exception(exc_value, limit=2, file=sys.stdout) print("*** print_exc:") traceback.print_exc(limit=2, file=sys.stdout) print("*** format_exc, first and last line:") formatted_lines = traceback.format_exc().splitlines() print(formatted_lines[0]) print(formatted_lines[-1]) print("*** format_exception:") print(repr(traceback.format_exception(exc_value))) print("*** extract_tb:") print(repr(traceback.extract_tb(exc_traceback))) print("*** format_tb:") print(repr(traceback.format_tb(exc_traceback))) print("*** tb_lineno:", exc_traceback.tb_lineno)9. Nói chung, nó sẽ chỉ hoạt động sau khi một ngoại lệ đã đạt đến một lời nhắc tương tác (xem *** print_tb: File "0). TraceBack.Print_Stack (f = none, giới hạn = none, file = none) ¶print_stack(f=None, limit=None, file=None)¶ In lên để giới hạn các mục nhập dấu vết (bắt đầu từ điểm gọi) nếu giới hạn là dương. Nếu không, in các mục import sys, traceback def lumberjack(): bright_side_of_life() def bright_side_of_life(): return tuple()[0] try: lumberjack() except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info() print("*** print_tb:") traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print("*** print_exception:") traceback.print_exception(exc_value, limit=2, file=sys.stdout) print("*** print_exc:") traceback.print_exc(limit=2, file=sys.stdout) print("*** format_exc, first and last line:") formatted_lines = traceback.format_exc().splitlines() print(formatted_lines[0]) print(formatted_lines[-1]) print("*** format_exception:") print(repr(traceback.format_exception(exc_value))) print("*** extract_tb:") print(repr(traceback.extract_tb(exc_traceback))) print("*** format_tb:") print(repr(traceback.format_tb(exc_traceback))) print("*** tb_lineno:", exc_traceback.tb_lineno)1. Đã thay đổi trong phiên bản 3.5: Đã thêm hỗ trợ giới hạn âm.Added negative limit support. Traceback.print_exception (exc, /, [value, tb,] giới hạn = none, file = none, chuỗi = true) In thông tin ngoại lệ và ngăn xếp các mục nhập từ TB đối tượng Traceback sang tệp. Điều này khác với import sys, traceback def lumberjack(): bright_side_of_life() def bright_side_of_life(): return tuple()[0] try: lumberjack() except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info() print("*** print_tb:") traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print("*** print_exception:") traceback.print_exception(exc_value, limit=2, file=sys.stdout) print("*** print_exc:") traceback.print_exc(limit=2, file=sys.stdout) print("*** format_exc, first and last line:") formatted_lines = traceback.format_exc().splitlines() print(formatted_lines[0]) print(formatted_lines[-1]) print("*** format_exception:") print(repr(traceback.format_exception(exc_value))) print("*** extract_tb:") print(repr(traceback.extract_tb(exc_traceback))) print("*** format_tb:") print(repr(traceback.format_tb(exc_traceback))) print("*** tb_lineno:", exc_traceback.tb_lineno)1 theo những cách sau: Nếu TB không phải là None , nó sẽ in tiêu đề import sys, traceback def lumberjack(): bright_side_of_life() def bright_side_of_life(): return tuple()[0] try: lumberjack() except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info() print("*** print_tb:") traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print("*** print_exception:") traceback.print_exception(exc_value, limit=2, file=sys.stdout) print("*** print_exc:") traceback.print_exc(limit=2, file=sys.stdout) print("*** format_exc, first and last line:") formatted_lines = traceback.format_exc().splitlines() print(formatted_lines[0]) print(formatted_lines[-1]) print("*** format_exception:") print(repr(traceback.format_exception(exc_value))) print("*** extract_tb:") print(repr(traceback.extract_tb(exc_traceback))) print("*** format_tb:") print(repr(traceback.format_tb(exc_traceback))) print("*** tb_lineno:", exc_traceback.tb_lineno)3format_list(extracted_list)¶ Nó in loại ngoại lệ và giá trị sau dấu vết ngăn xếp Nếu loại (giá trị) làimport sys, traceback def lumberjack(): bright_side_of_life() def bright_side_of_life(): return tuple()[0] try: lumberjack() except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info() print("*** print_tb:") traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print("*** print_exception:") traceback.print_exception(exc_value, limit=2, file=sys.stdout) print("*** print_exc:") traceback.print_exc(limit=2, file=sys.stdout) print("*** format_exc, first and last line:") formatted_lines = traceback.format_exc().splitlines() print(formatted_lines[0]) print(formatted_lines[-1]) print("*** format_exception:") print(repr(traceback.format_exception(exc_value))) print("*** extract_tb:") print(repr(traceback.extract_tb(exc_traceback))) print("*** format_tb:") print(repr(traceback.format_tb(exc_traceback))) print("*** tb_lineno:", exc_traceback.tb_lineno)4 và giá trị có định dạng thích hợp, nó sẽ in dòng trong đó lỗi cú pháp xảy ra với một chăm sóc cho biết vị trí gần đúng của lỗi.format_exception_only(exc, /[, value])¶ Vì Python 3.10, thay vì chuyển giá trị và bệnh lao, một đối tượng ngoại lệ có thể được truyền làm đối số đầu tiên. Nếu giá trị và bệnh lao được cung cấp, đối số đầu tiên bị bỏ qua để cung cấp khả năng tương thích ngược. Vì Python 3.10, thay vì giá trị vượt qua, một đối tượng ngoại lệ có thể được truyền như là đối số đầu tiên. Nếu giá trị được cung cấp, đối số đầu tiên bị bỏ qua để cung cấp khả năng tương thích ngược. Đã thay đổi trong phiên bản 3.10: Tham số ETYPE đã được đổi tên thành Exc và hiện chỉ có vị trí.The etype parameter has been renamed to exc and is now positional-only. Traceback.format_exception (exc, /, [value, tb,] giới hạn = none, chuỗi = true) ¶format_exception(exc, /, [value, tb, ]limit=None, chain=True)¶Định dạng một dấu vết ngăn xếp và thông tin ngoại lệ. Các đối số có cùng ý nghĩa với các đối số tương ứng với >>> import traceback >>> traceback.format_list([('spam.py', 3, '1. Giá trị trả về là một danh sách các chuỗi, mỗi chuỗi kết thúc trong một dòng mới và một số có chứa các dòng bên trong. Khi các dòng này được nối và in, chính xác cùng một văn bản được in như >>> import traceback >>> traceback.format_list([('spam.py', 3, '1. Thay đổi trong phiên bản 3.5: Đối số ETYPE bị bỏ qua và suy ra từ loại giá trị.The etype argument is ignored and inferred from the type of value. Đã thay đổi trong phiên bản 3.10: Chức năng này hành vi và chữ ký này đã được sửa đổi để khớp với >>> import traceback >>> traceback.format_list([('spam.py', 3, '1. Traceback.format_exc (giới hạn = none, chuỗi = true) ¶format_exc(limit=None, chain=True)¶ Điều này giống như >>> import traceback >>> traceback.format_list([('spam.py', 3, '4 nhưng trả về một chuỗi thay vì in vào một tệp. Traceback.format_tb (tb, giới hạn = không) ¶format_tb(tb, limit=None)¶ Một tốc ký cho >>> import traceback >>> traceback.format_list([('spam.py', 3, '5. Traceback.format_stack (f = none, giới hạn = không) ¶format_stack(f=None, limit=None)¶ Một tốc ký cho >>> import traceback >>> traceback.format_list([('spam.py', 3, '6. TraceBack.Clear_Frames (TB) ¶clear_frames(tb)¶ Xóa các biến cục bộ của tất cả các khung ngăn xếp trong TB theo dõi bằng cách gọi phương thức >>> import traceback >>> traceback.format_list([('spam.py', 3, '7 của mỗi đối tượng khung. Mới trong phiên bản 3.4. Traceback.walk_stack (f) ¶walk_stack(f)¶Đi bộ ngăn xếp theo >>> import traceback >>> traceback.format_list([('spam.py', 3, '8 từ khung đã cho, mang lại khung và số đường cho mỗi khung hình. Nếu F là None , ngăn xếp hiện tại được sử dụng. Người trợ giúp này được sử dụng với sys.last_traceback 0.Mới trong phiên bản 3.5. Traceback.walk_tb (TB) ¶walk_tb(tb)¶Đi bộ theo dõi sau Mới trong phiên bản 3.5. Traceback.walk_tb (TB) ¶ Đi bộ theo dõi sau sys.last_traceback1 mang lại khung và số đường cho mỗi khung hình. Người trợ giúp này được sử dụng với sys.last_traceback0.Mới trong phiên bản 3.5. Traceback.walk_tb (TB) ¶ Đi bộ theo dõi sausys.last_traceback 1 mang lại khung và số đường cho mỗi khung hình. Người trợ giúp này được sử dụng với sys.last_traceback 0.traceback.TracebackException(exc_type, exc_value, exc_traceback, *, limit=None,
lookup_lines=True, capture_locals=False, compact=False)¶Mô -đun cũng xác định các lớp sau:
Các đối tượng Nắm bắt một ngoại lệ cho kết xuất sau này. giới hạn, tra cứu_lines và capture_locals cũng như đối với lớp *** print_tb: File "4. Nếu Compact là đúng, chỉ có dữ liệu được yêu cầu bằng phương thức ________ 53 sys.last_traceback 7 được lưu trong các thuộc tính của lớp. Cụ thể, trường import sys, traceback def lumberjack(): bright_side_of_life() def bright_side_of_life(): return tuple()[0] try: lumberjack() except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info() print("*** print_tb:") traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print("*** print_exception:") traceback.print_exception(exc_value, limit=2, file=sys.stdout) print("*** print_exc:") traceback.print_exc(limit=2, file=sys.stdout) print("*** format_exc, first and last line:") formatted_lines = traceback.format_exc().splitlines() print(formatted_lines[0]) print(formatted_lines[-1]) print("*** format_exception:") print(repr(traceback.format_exception(exc_value))) print("*** extract_tb:") print(repr(traceback.extract_tb(exc_traceback))) print("*** format_tb:") print(repr(traceback.format_tb(exc_traceback))) print("*** tb_lineno:", exc_traceback.tb_lineno)7 chỉ được tính toán nếu import sys, traceback def lumberjack(): bright_side_of_life() def bright_side_of_life(): return tuple()[0] try: lumberjack() except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info() print("*** print_tb:") traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print("*** print_exception:") traceback.print_exception(exc_value, limit=2, file=sys.stdout) print("*** print_exc:") traceback.print_exc(limit=2, file=sys.stdout) print("*** format_exc, first and last line:") formatted_lines = traceback.format_exc().splitlines() print(formatted_lines[0]) print(formatted_lines[-1]) print("*** format_exception:") print(repr(traceback.format_exception(exc_value))) print("*** extract_tb:") print(repr(traceback.extract_tb(exc_traceback))) print("*** format_tb:") print(repr(traceback.format_tb(exc_traceback))) print("*** tb_lineno:", exc_traceback.tb_lineno)6 là None và sys.exc_info() 1 là sai.¶Lưu ý rằng khi người dân địa phương bị bắt, chúng cũng được hiển thị trong dấu vết. A import sys, traceback def lumberjack(): bright_side_of_life() def bright_side_of_life(): return tuple()[0] try: lumberjack() except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info() print("*** print_tb:") traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print("*** print_exception:") traceback.print_exception(exc_value, limit=2, file=sys.stdout) print("*** print_exc:") traceback.print_exc(limit=2, file=sys.stdout) print("*** format_exc, first and last line:") formatted_lines = traceback.format_exc().splitlines() print(formatted_lines[0]) print(formatted_lines[-1]) print("*** format_exception:") print(repr(traceback.format_exception(exc_value))) print("*** extract_tb:") print(repr(traceback.extract_tb(exc_traceback))) print("*** format_tb:") print(repr(traceback.format_tb(exc_traceback))) print("*** tb_lineno:", exc_traceback.tb_lineno)6 gốc. __định nghĩa bài văn__¶¶ A import sys, traceback def lumberjack(): bright_side_of_life() def bright_side_of_life(): return tuple()[0] try: lumberjack() except IndexError: exc_type, exc_value, exc_traceback = sys.exc_info() print("*** print_tb:") traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print("*** print_exception:") traceback.print_exception(exc_value, limit=2, file=sys.stdout) print("*** print_exc:") traceback.print_exc(limit=2, file=sys.stdout) print("*** format_exc, first and last line:") formatted_lines = traceback.format_exc().splitlines() print(formatted_lines[0]) print(formatted_lines[-1]) print("*** format_exception:") print(repr(traceback.format_exception(exc_value))) print("*** extract_tb:") print(repr(traceback.extract_tb(exc_traceback))) print("*** format_tb:") print(repr(traceback.format_tb(exc_traceback))) print("*** tb_lineno:", exc_traceback.tb_lineno)7 gốc. __Suppress_context__¶ Giá trịsys.exc_info() 1 từ ngoại lệ ban đầu.¶__notes__¶ Giá trịsys.exc_info() 7 từ ngoại lệ ban đầu hoặc None nếu ngoại lệ không có bất kỳ ghi chú nào. Nếu nó không phải là None , nó được định dạng trong dấu vết sau chuỗi ngoại lệ.¶Mới trong phiên bản 3.11. cây rơm¶¶A *** print_tb: File "4 đại diện cho Traceback. exc_type¶¶ Lớp của Traceback ban đầu. Tên tệp¶Đối với lỗi cú pháp - Tên tệp nơi xảy ra lỗi. vải mỏng¶Đối với lỗi cú pháp - Số dòng nơi xảy ra lỗi. chữ¶¶Đối với lỗi cú pháp - văn bản xảy ra lỗi. bù lại¶ from_exception(exc, *, limit=None, lookup_lines=True, capture_locals=False)¶Mô -đun cũng xác định các lớp sau: Các đối tượng Nắm bắt một ngoại lệ cho kết xuất sau này. giới hạn, tra cứu_lines và capture_locals cũng như đối với lớp *** print_tb: File "4. __Suppress_context__¶ Giá trịsys.exc_info() 1 từ ngoại lệ ban đầu.(*, chain=True)¶__notes__¶ Giá trị Mới trong phiên bản 3.11. cây rơm¶ A*** print_tb: File "4 đại diện cho Traceback.()¶ exc_type¶ Lớp của Traceback ban đầu. Tên tệp cây rơm¶ A *** print_tb:
File " |