Hướng dẫn python print exception message traceback - python in thông báo ngoại lệ theo dõi lại
Khi bạn không muốn tạm dừng chương trình của mình về lỗi, bạn cần xử lý lỗi đó với thử/ngoại trừ: Show
Để trích xuất toàn bộ dấu vết, chúng tôi sẽ sử dụng mô -đun 7 từ thư viện tiêu chuẩn:
Và để tạo ra một StackTrace phức tạp để chứng minh rằng chúng ta có được StackTrace đầy đủ:
InĐể in toàn bộ dấu vết, hãy sử dụng phương pháp 8:
Bản in nào:
Tốt hơn là in, ghi nhật ký:Tuy nhiên, một thực tiễn tốt nhất là có một logger được thiết lập cho mô -đun của bạn. Nó sẽ biết tên của mô -đun và có thể thay đổi mức độ (trong số các thuộc tính khác, chẳng hạn như trình xử lý)
Trong trường hợp đó, bạn sẽ muốn chức năng 9 thay thế:
Nhật ký nào:
Hoặc có lẽ bạn chỉ muốn chuỗi, trong trường hợp đó, bạn sẽ muốn chức năng 0 thay thế:
Nhật ký nào:
Hoặc có lẽ bạn chỉ muốn chuỗi, trong trường hợp đó, bạn sẽ muốn chức năng def raise_error(): raise RuntimeError('something bad happened!') def do_something_that_might_error(): raise_error() 0 thay thế:Sự kết luận 0Và đối với cả ba tùy chọn, chúng tôi thấy chúng tôi nhận được đầu ra giống như khi chúng tôi có lỗi:Sử dụng cái nào 1Mối quan tâm về hiệu suất không quan trọng ở đây vì IO thường thống trị. Tôi thích, vì nó chính xác là những gì được yêu cầu theo cách tương thích về phía trước: Mã nguồn: lib/traceback.py Lib/traceback.py 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 1 và được trả về dưới dạng mục thứ ba từ 2.Mô -đun xác định các chức năng sau: ________ 23 ________ 24 (tb, giới hạn = none, file = none) ¶(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 5 cuối cùng. Nếu giới hạn bị bỏ qua hoặc 6, tất cả các mục được in. Nếu tệp bị bỏ qua hoặc 6, đầu ra sẽ chuyển đến 8; 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. ________ 23 ________ 30 (exc, /, [value, tb,] giới hạn = none, file = none, chuỗi = true)(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 1 theo các 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 1. Nếu chuỗi là đúng (mặc định), thì các ngoại lệ được xích (thuộc tính 6 hoặc 7 của ngoại lệ) cũng sẽ được in, giống như bản thân trình thông dịch thực hiện khi in 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. ________ 23 ________ 39 (giới hạn = không, tệp = none, chuỗi = true) ¶(limit=None, file=None, chain=True)¶Đây là một tốc ký cho 0. ________ 23 ________ 42 (giới hạn = none, file = none, chuỗi = true) ¶(limit=None, file=None,
chain=True)¶Đây là một tốc ký cho 3. 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 4). ________ 23 ________ 46 (f = none, giới hạn = none, file = none) ¶(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 5 cuối cùng. Nếu giới hạn bị bỏ qua hoặc 6, tất cả các mục được in. Đối số F tùy chọn có thể được sử dụng để chỉ định khung ngăn xếp thay thế để bắt đầu. Đối số tệp tùy chọn có ý nghĩa tương tự như đối với 1.Đã thay đổi trong phiên bản 3.5: Đã thêm hỗ trợ giới hạn âm.Added negative limit support. Trả về một đối tượng 0 đại diện cho một danh sách các mục nhập ngăn xếp được xử lý trước của trực tuyến được trích xuất từ TB đối tượng Traceback. Nó rất hữu ích cho định dạng thay thế của dấu vết ngăn xếp. Đối số giới hạn tùy chọn có ý nghĩa tương tự như đối với 1. Một mục nhập dấu vết ngăn xếp trước của người Viking là một đối tượng 2 có chứa các thuộc tính 3, 4, 5 và 6 đại diện cho thông tin thường được in cho dấu vết ngăn xếp. 6 là một chuỗi với khoảng trắng dẫn đầu và bị tước bỏ; Nếu nguồn không có sẵn, nó là 6.Trích xuất dấu vết thô từ khung ngăn xếp hiện tại. Giá trị trả về có định dạng tương tự như đối với 9. Các đối số F và giới hạn tùy chọn có cùng ý nghĩa với 0. ________ 23 ________ 62 (Trích xuất_list) ¶(extracted_list)¶Đưa ra một danh sách các đối tượng Tuples hoặc 2 được trả về bởi 9 hoặc 5, trả lại một danh sách các chuỗi sẵn sàng để in. Mỗi chuỗi trong danh sách kết quả tương ứng với mục có cùng chỉ mục trong danh sách đối số. Mỗi chuỗi kết thúc trong một dòng mới; Các chuỗi cũng có thể chứa các dòng nội bộ, đối với những mục có dòng văn bản nguồn không phải là 6. ________ 23 ________ 68 (exc, /[, value]) ¶(exc, /[,
value])¶Định dạng phần ngoại lệ của một dấu vết bằng cách sử dụng một giá trị ngoại lệ như được đưa ra bởi 9. 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. Thông thường, danh sách chứa một chuỗi duy nhất; Tuy nhiên, đối với các ngoại lệ 4, nó chứa một số dòng (khi được in) hiển thị thông tin chi tiết về nơi xảy ra lỗi cú pháp. Thông báo cho biết ngoại lệ nào xảy ra là chuỗi cuối cùng trong danh sách.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. ________ 23 ________ 72 (exc, /, [value, tb,] giới hạn = none, chuỗi = true) ¶(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 3. 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ư 3.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 3. ________ 23 ________ 77 (giới hạn = không, chuỗi = true) ¶(limit=None,
chain=True)¶Điều này giống như 8 nhưng trả về một chuỗi thay vì in vào tệp. ________ 23 ________ 80 (tb, giới hạn = không) ¶(tb,
limit=None)¶Một tốc ký cho 1. ________ 23 ________ 83 (f = none, giới hạn = không) ¶(f=None,
limit=None)¶Một tốc ký cho 4. ________ 23 ________ 86 (TB)(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 7 của mỗi đối tượng khung.Mới trong phiên bản 3.4. ________ 23 ________ 89 (f)(f)¶Đi bộ ngăn xếp theo 0 từ khung đã cho, mang lại khung và số đường cho mỗi khung hình. Nếu F là 6, 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 2.Mới trong phiên bản 3.5. Đi bộ theo dõi sau 5 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 2.Mới trong phiên bản 3.5. ________ 23 ________ 94 (TB) Đi bộ theo dõi sau DEBUG:__main__:Traceback (most recent call last):
File " |