In Stacktrace trong Nhật ký Pyhton

In Stacktrace Trong Nhat Ky Pyhton



Một tập hợp các cuộc gọi tiếp cận tại một thời điểm cụ thể được thể hiện trong một stacktrace. Khi một chương trình đưa ra một ngoại lệ, Python sẽ tạo một stacktrace, còn được gọi là truy ngược hoặc truy ngược. Có rất nhiều chi tiết trong stacktrace này có thể được khai thác để xác định vấn đề. Gói ghi nhật ký Python đi kèm với một số tính năng cơ bản và có nhiều cấp độ ghi nhật ký bao gồm “gỡ lỗi”, “thông tin”, “cảnh báo”, “lỗi” và “quan trọng”.

Ví dụ 1: In Stacktrace bằng Python bằng cách sử dụng Mô-đun Traceback

Trong ví dụ này, chúng tôi sẽ sử dụng một đoạn mã đơn giản để trình bày cách triển khai mô-đun truy nguyên của Python để in dấu vết ngăn xếp. Gói trackback này bao gồm một tính năng phổ biến để thu thập, lưu trữ và hiển thị dấu vết ngăn xếp từ các ngôn ngữ máy tính. Nó sao chép một cách trung thực các thao tác in dấu vết ngăn xếp của tập lệnh. Nếu bạn cần xem dấu vết ngăn xếp, thì điều đó là cần thiết.

Nói cách khác, dấu vết ngăn xếp hiển thị từng thao tác xảy ra trước thao tác dẫn đến sự cố. Thông tin quan trọng nhất luôn được báo cáo ở dòng cuối cùng của dấu vết ngăn xếp, đó là khi lỗi được xác định. Tất cả các chức năng gọi trong lỗi kết quả có thể được sử dụng để nhanh chóng xác định vị trí và giải quyết vấn đề.







Hãy bắt đầu bằng cách triển khai mã thông qua nhập thư viện truy nguyên Python. Sau đó, trong dòng tiếp theo, chúng tôi tạo một mảng và liệt kê các phần tử với một số giá trị. Các giá trị của danh sách mảng là “7”, “8”, “9”, và “10”. Có bốn giá trị trong danh sách mảng. Danh sách mảng này đã được lưu trong biến “A” đã được khởi tạo trước đó.



Sau đó, chúng tôi sử dụng thuật ngữ “thử” và giá trị “A=6” trong dòng tiếp theo. Chúng tôi sử dụng các khối thử ngoại trừ trong Python để quản lý các ngoại lệ. Phương pháp này được sử dụng để viết tập lệnh có thể gây ra lỗi trong tiêu đề khối. Ngoại lệ về cơ bản là lỗi, tương tự như lỗi cú pháp. Trong một ngoại lệ của chương trình, xử lý ngoại lệ là hành động duy nhất để phản hồi ngoại lệ. Quay trở lại kịch bản, chúng tôi sử dụng 'ngoại trừ' trong dòng tiếp theo.



Trong khối ngoại trừ, chúng tôi sử dụng “traceback.print exc()”, viết tắt của “in ngoại lệ”. Chúng tôi sử dụng hàm “print()” bên trong hộp ngoại lệ là “chương trình kết thúc” để câu lệnh này in ra khi phát sinh ngoại lệ. Bây giờ, nếu một ngoại lệ xảy ra trong hộp thử, chương trình sẽ ngay lập tức di chuyển đến các khối ngoại trừ và tiếp tục. Nếu một ngoại lệ không xảy ra, khối ngoại lệ sẽ bị bỏ qua hoàn toàn. Bây giờ, khi ngoại lệ xảy ra, chúng ta có thể thấy trong mã rằng giá trị “6” đã được nhập vào hộp thử mặc dù giá trị này không có trong danh sách mảng. Do đó, mã ngay lập tức chuyển đến hộp ngoại lệ và in câu lệnh 'chương trình kết thúc' trong màn hình đầu ra.





Các lệnh gọi hàm khác nhau tạo nên truy nguyên được sắp xếp từ gần đây nhất đến ít gần đây nhất, từ dưới lên trên. Các thao tác này đều được biểu diễn bằng câu lệnh hai dòng. Mỗi cuộc gọi bắt đầu bằng tên tệp, số thứ tự và tên mô-đun, tất cả đều chỉ ra vị trí của mã. Sau đó, nó sẽ hiển thị câu lệnh in ngoại lệ “chương trình kết thúc” do giá trị “6” không có trong danh sách đã khai báo, dẫn đến đầu ra “chỉ mục danh sách nằm ngoài phạm vi”.



Ví dụ 2: In Stacktrace bằng Python bằng cách sử dụng Phương thức Logging.Exception()

Trong ví dụ này, chúng tôi sẽ trình bày cách sử dụng phương thức “logging.Exception()” của Python để xuất một stacktrace. Gói ghi nhật ký trong Python cho phép chúng tôi ghi lại các lỗi cũng như ghi lại các lỗi và ngoại lệ. Mô-đun ghi nhật ký cung cấp cho chúng tôi lựa chọn các mô-đun ghi nhật ký bao gồm “gỡ lỗi”, “thông tin”, “cảnh báo”, “lỗi” và “nghiêm trọng”. Nói một cách đơn giản, đây thực chất là các lớp mô-đun ghi nhật ký. Để ghi lại một ngoại lệ có lỗi trong Python, hãy sử dụng hàm “logging.Exception()”. Hàm này thêm một báo cáo có trạng thái LỖI vào bộ ghi này. Người ta tin rằng các tham số là để gỡ lỗi. Thông tin về ngoại lệ được đính kèm với báo cáo ghi nhật ký. Vị trí duy nhất để gọi thủ tục này phải là bộ xử lý ngoại lệ.

Bây giờ, hãy xem mã. Đầu tiên, chúng tôi nhập hai thư viện – thư viện đầu tiên là ghi nhật ký và thư viện thứ hai là truy nguyên. Sau đó, chúng tôi sử dụng phương thức “basicConfig” với “logging” và chỉ định cấp độ là “logging.Debug”. Đối số duy nhất mà phương thức “getLogger()” lấy là “tên”. Do đó, chúng tôi sử dụng nó khi sử dụng chức năng “logging.getlogger”. Nếu một tên được đặt, một tham chiếu đến một phiên bản trình ghi nhật ký có tên đó sẽ được tạo; nếu không, gốc được trả lại. Cùng một đối tượng logger được tham chiếu bởi nhiều hoạt động getLogger() với cùng một danh tính.

Sau đó, chúng tôi sử dụng để thử và như chúng tôi biết trong khối thử, chúng tôi viết mã có thể đưa ra một ngoại lệ. Trong trường hợp này, chúng tôi sử dụng “myfunction()”. Nếu tình huống nhất định không phù hợp, một ngoại lệ sẽ xảy ra. Sau đó, mã ngay lập tức chuyển đến khối ngoại trừ. Trong blog ngoại lệ này, chúng tôi sử dụng “logging.info”. Bên trong nó, chúng tôi viết thông báo mà chúng tôi muốn in, đó là 'ngoại lệ đã diễn ra'. Điều này là do nếu một ngoại lệ xảy ra, một lỗi đơn giản xảy ra thì nó sẽ hiển thị thông báo này trên màn hình. Nhưng nếu lỗi không xảy ra, nó sẽ bỏ qua toàn bộ thông báo ngoại lệ.

Chúng tôi cũng đặt “exc info=True” với thông báo. Toàn bộ stacktrace sẽ được đưa vào nhật ký khi thông tin ex được đặt thành True, tương tự như những gì xảy ra với “logger.Exception()”. Điểm khác biệt duy nhất là bạn có thể nhanh chóng chuyển cấp độ nhật ký từ lỗi sang cấp độ khác bằng cách hoán đổi nhật ký.

Bây giờ, một ngoại lệ đã xảy ra trong tập lệnh, dòng đầu tiên của đầu ra là thông báo 'ngoại lệ đã diễn ra', theo sau là mức ghi nhật ký được sử dụng trong tập lệnh là 'thông tin'. Tên của logger xuất hiện dưới dạng gốc trong trường hợp này. Sau đó, cuộc gọi truy nguyên xuất hiện, hiển thị tên mô-đun, dòng và tệp. Cuối cùng, thông báo lỗi “chức năng của tôi” không được xác định.

Hãy nói về một số mã khác sử dụng ghi nhật ký. Phương thức ngoại lệ() bắt đầu bằng cách nhập thư viện để ghi nhật ký. Tiếp theo, hai biến – “m” và “n” – được khởi tạo và cho các giá trị lần lượt là “7” và “0”. Khối thử hiện được sử dụng trong bước tiếp theo. Trong đó, chúng tôi viết mã có thể gây ra ngoại lệ. Đầu tiên, chúng ta khai báo biến “o”. Sau đó, chúng tôi đặt “m” đó chia cho “n”. Điều này gây ra một ngoại lệ vì mẫu số bằng 0 và chúng ta không thể chia bất kỳ số nào cho 0, điều đó có nghĩa là các lỗi sẽ phát sinh. Do đó, mã sẽ chuyển sang khối ngoại trừ nơi sử dụng “logging.error”. Lỗi là cấp độ đăng nhập. Nếu xảy ra ngoại lệ, chúng tôi sẽ in một thông báo hoặc câu lệnh có nội dung 'đã xảy ra ngoại lệ' và chúng tôi đặt 'exc info=true'. Nếu chúng tôi không đặt nó thành true, nó chỉ in khối ngoại lệ và không hiển thị thông tin truy nguyên.

Bởi vì chúng tôi đã chọn cấp độ “ERROR” trong tập lệnh của mình, nên trước tiên, nó sẽ hiển thị thư mục gốc dưới dạng tên của trình ghi nhật ký, sau đó là thông báo “đã xảy ra ngoại lệ”. Sau đó, thông tin truy nguyên bao gồm tên tệp, số dòng và mô-đun sẽ được hiển thị. Sau đó, dòng tiếp theo hiển thị thông báo lỗi vì mẫu số không thể bằng 0. Và vì mẫu số bằng 0 trong mã này, nên lỗi này được gọi là lỗi chia không.

Sự kết luận

Trong bài viết này, chúng ta đã xem xét quá trình in dấu vết ngăn xếp trong nhật ký Python cũng như cách sử dụng mô-đun truy nguyên để tạo dấu vết ngăn xếp. Trong ví dụ đầu tiên, thư viện theo dõi đã được nhập và các phương thức thử và ngoại trừ đã được sử dụng. Mã được viết trong hộp thử. Nếu một ngoại lệ xảy ra, nó sẽ nhanh chóng chuyển đến khối ngoại lệ và hiển thị câu lệnh ngoại lệ trên màn hình. Trong ví dụ thứ hai, chúng tôi đã sử dụng tính năng ghi nhật ký tương tự như ví dụ đầu tiên. Phương thức ngoại lệ() sử dụng các mức ghi nhật ký “thông tin” và “lỗi”. Nếu một ngoại lệ xảy ra, nó sẽ hiển thị một câu lệnh ngoại lệ.