Ghi nhật ký gỡ lỗi bằng Python là gì?

Sự phức tạp của các ứng dụng liên tục làm tăng nhu cầu về nhật ký tốt. Nhu cầu này không chỉ dành cho mục đích sửa lỗi mà còn để thu thập thông tin chi tiết về hiệu suất và các sự cố có thể xảy ra với một ứng dụng

Thư viện chuẩn Python là một loạt các phương tiện và mô-đun cung cấp hầu hết các tính năng ghi nhật ký cơ bản. Các lập trình viên Python được cấp quyền truy cập vào các chức năng của hệ thống mà họ sẽ không thể sử dụng. Khi được thiết lập chính xác, các thông báo tường trình có thể lấy ra một loạt thông tin hữu ích liên quan đến thời gian và địa điểm nhật ký được kích hoạt cũng như bối cảnh của nhật ký

Python có một mô-đun ghi nhật ký tích hợp được thiết kế để cung cấp khả năng hiển thị quan trọng cho các ứng dụng mà không cần thiết lập phức tạp. Cho dù một doanh nghiệp mới bắt đầu hay đã hoàn toàn đắm chìm với mô-đun ghi nhật ký của Python, thì luôn có điều gì đó mới mẻ và thú vị để tìm hiểu về cách định cấu hình mô-đun này. Các thành viên trong nhóm sẽ có thể dễ dàng ghi nhật ký tất cả dữ liệu họ cần, định tuyến dữ liệu đó đến các vị trí thích hợp và tập trung tất cả các nhật ký để có cái nhìn sâu sắc hơn về các ứng dụng quan trọng

nội dung

Ghi nhật ký Python là gì?

Ghi nhật ký là cách mà các nhóm CNTT theo dõi các sự kiện xảy ra khi các ứng dụng phần mềm được chạy. Ghi nhật ký là một phần quan trọng trong quá trình phát triển phần mềm, gỡ lỗi và chạy trơn tru chương trình đã hoàn thành. Nếu không có nhật ký chính xác về các giai đoạn phát triển, nếu chương trình gặp sự cố, nguyên nhân của sự cố có thể được phát hiện là rất mong manh.

Nếu bằng một phép màu nào đó có thể tìm ra nguyên nhân, đó sẽ là một thử thách gian nan, tốn thời gian. Với việc ghi nhật ký, một dấu vết breadcrumb kỹ thuật số được để lại có thể dễ dàng theo dõi trở lại gốc rễ của vấn đề

Python được trang bị một mô-đun ghi nhật ký trong thư viện tiêu chuẩn nhưng mở rộng, cung cấp một khung linh hoạt để đưa ra các thông báo nhật ký từ tất cả các chương trình Python. Mô-đun ghi nhật ký Python này được các thư viện sử dụng rộng rãi và đã trở thành điểm truy cập đầu tiên của nhiều nhà phát triển khi ghi nhật ký

Mô-đun không thể thiếu này cung cấp phương pháp tốt nhất để các ứng dụng định cấu hình nhiều trình xử lý nhật ký và cách định tuyến các thông báo tường trình đến đúng trình xử lý. Điều này giúp tạo ra một cấu hình rất linh hoạt có khả năng xử lý nhiều trường hợp sử dụng khác nhau

Các cấp nhật ký liên quan đến “tầm quan trọng” của nhật ký. Ví dụ: nhật ký "lỗi" là ưu tiên hàng đầu và nên được coi là khẩn cấp hơn nhật ký "cảnh báo". Nhật ký "gỡ lỗi" thường chỉ hữu ích khi ứng dụng đang được gỡ lỗi

Python có sáu cấp độ nhật ký với mỗi cấp độ được gán một số nguyên cụ thể cho biết mức độ nghiêm trọng của nhật ký

  • KHÔNG ĐẶT = 0
  • GỠ LỖI=10
  • THÔNG TIN=20
  • CẢNH BÁO=30
  • LỖI=40
  • TIÊU CHUẨN=50

Để phát ra một thông báo tường trình, trước tiên người gọi phải yêu cầu một bộ ghi nhật ký có tên. Tên này có thể được ứng dụng sử dụng để định cấu hình các bộ quy tắc khác nhau cho các bộ ghi nhật ký khác nhau. Sau đó, bộ ghi nhật ký có thể được sử dụng để gửi các thông báo có định dạng đơn giản ở các cấp độ ghi nhật ký khác nhau (chẳng hạn như GỠ LỖI, THÔNG TIN, LỖI), đến lượt ứng dụng có thể sử dụng để xử lý các thông báo có tầm quan trọng cao hơn và khác với các thông báo có mức độ ưu tiên thấp hơn. Mặc dù điều này nghe có vẻ khá phức tạp nhưng nó thực sự rất đơn giản

Đằng sau hậu trường, thông báo được chuyển vào một đối tượng bản ghi nhật ký và sau đó được định tuyến đến một đối tượng xử lý được đăng ký cụ thể cho trình ghi nhật ký này. Trình xử lý sau đó sử dụng một trình định dạng để biến bản ghi nhật ký thành một chuỗi và gửi chuỗi đó đi

May mắn thay, hầu hết thời gian, các nhà phát triển không cần phải biết chi tiết. Mọi thứ diễn ra liền mạch trong nền

Một số nhà phát triển chọn sử dụng phương pháp in để xác thực xem các câu lệnh có được thực thi chính xác hay không. Tuy nhiên, in ấn không phải là giải pháp lý tưởng. Nó có thể giải quyết các vấn đề trên các tập lệnh đơn giản, nhưng khi nói đến các tập lệnh phức tạp, phương pháp in là không phù hợp

Tại sao in ấn là không phù hợp

Lý do chính khiến in không phải là giải pháp lý tưởng để ghi nhật ký là do in không cung cấp dấu thời gian khi xảy ra lỗi

Biết chính xác thời điểm xảy ra lỗi có thể là một yếu tố quan trọng trong khi gỡ lỗi ứng dụng. Nó có thể không quan trọng đối với các gói mã nhỏ có thể chạy và kiểm tra trong thời gian thực, nhưng các ứng dụng lớn hơn không có dấu thời gian lỗi sẽ gây ra một số hậu quả nghiêm trọng. Một tùy chọn sẽ là thêm mô-đun ngày giờ cho thông tin bổ sung đó, nhưng điều này tạo ra một cơ sở mã rất lộn xộn. Dưới đây là một vài lý do khác tại sao bạn nên tránh phương pháp này.  

  • Không thể lưu tin nhắn in vào mọi loại tệp
  • Tin nhắn in trước tiên được chuyển đổi thành chuỗi văn bản. Nhà phát triển có thể sử dụng đối số tệp trong bản in để lưu thư vào tệp. Tuy nhiên, nó phải là một đối tượng có phương thức ghi (chuỗi) vì không thể ghi thông báo vào tệp nhị phân
  • Báo cáo in rất khó phân loại

Lấy ví dụ, một tệp nhật ký chứa nhiều câu lệnh in. Khi ứng dụng đã trải qua các giai đoạn phát triển khác nhau và được đưa vào sản xuất, việc phân loại và sửa lỗi các câu lệnh in này gần như là không thể. Các câu lệnh in có thể được sửa đổi để phù hợp với các giai đoạn khác nhau và cung cấp thông tin bổ sung, nhưng điều này sẽ thêm một lượng dữ liệu vô dụng vào cơ sở mã nhằm cố gắng buộc bản in đó làm điều gì đó mà nó không phù hợp hoặc được xây dựng để làm.

Thực hành ghi nhật ký Python tốt nhất theo cấp độ

Thư viện tiêu chuẩn trong Python bao gồm một mô-đun ghi nhật ký linh hoạt được tích hợp sẵn, cho phép các nhà phát triển tạo các cấu hình khác nhau cho các nhu cầu ghi nhật ký khác nhau. Các chức năng có trong mô-đun này được thiết kế để cho phép các nhà phát triển đăng nhập vào các đích khác nhau. Điều này được thực hiện bằng cách xác định các trình xử lý cụ thể và gửi thông báo tường trình tới các trình xử lý được chỉ định

Các mức ghi nhật ký là các nhãn được thêm vào các mục nhật ký nhằm mục đích tìm kiếm, lọc và phân loại các mục nhật ký. Điều này giúp quản lý mức độ chi tiết của thông tin. Khi các cấp độ nhật ký được đặt bằng thư viện ghi nhật ký tiêu chuẩn, chỉ các sự kiện ở cấp độ đó trở lên mới được ghi lại

Điều quan trọng là luôn bao gồm dấu thời gian cho mỗi mục nhật ký. Biết một sự kiện xảy ra mà không biết khi nào không tốt hơn là không biết gì về sự kiện đó. Thông tin này hữu ích cho việc khắc phục sự cố, cũng như hiểu rõ hơn để sử dụng phân tích

Rất tiếc, không phải lúc nào mọi người cũng thống nhất về định dạng sử dụng cho dấu thời gian. Bản năng đầu tiên sẽ là sử dụng tiêu chuẩn của nước xuất xứ, nhưng nếu ứng dụng có sẵn trên toàn thế giới, điều này có thể rất khó hiểu. Định dạng được đề xuất có tên là ISO-8601. Đó là một tiêu chuẩn được quốc tế công nhận, được biểu thị bằng YYYY-MM-DD theo sau là thời gian, như thế này. 2021-07-14T14. 00-02. 00

Ưu điểm của mô-đun ghi nhật ký Python

Mô-đun ghi nhật ký Python cung cấp các giải pháp thông minh cho tất cả các vấn đề này

Định dạng của các tin nhắn được ghi lại có thể dễ dàng kiểm soát. Mô-đun được trang bị nhiều thuộc tính hữu ích khác nhau có thể được đưa vào hoặc loại bỏ khỏi nhật ký. Điều này để lại một nhật ký rõ ràng, nhiều thông tin về các giai đoạn phát triển

Tin nhắn có thể được ghi lại với các mức độ khẩn cấp hoặc thông tin cảnh báo khác nhau để giúp phân loại dễ dàng hơn. Gỡ lỗi một ứng dụng cũng dễ dàng hơn khi nhật ký được phân loại đúng cách. Ngoài ra, đích đến của nhật ký có thể được đặt thành bất kỳ thứ gì, kể cả ổ cắm

Một ứng dụng Python được tổ chức tốt rất có thể bao gồm nhiều hơn một mô-đun. Trong một số trường hợp, mục đích là để các chương trình khác sử dụng các mô-đun này, nhưng trừ khi nhà phát triển cố tình thiết kế các mô-đun có thể tái sử dụng bên trong ứng dụng, có khả năng là người dùng đang sử dụng các mô-đun có sẵn từ Chỉ mục gói Python và các mô-đun mà nhà phát triển đã viết

Nói chung, một mô-đun sẽ chỉ tạo thông báo tường trình như một phương pháp hay nhất và không định cấu hình cách xử lý các thông báo đó. Ứng dụng chịu trách nhiệm cho phần đó

Trách nhiệm duy nhất mà các mô-đun nên có là làm cho ứng dụng dễ dàng định tuyến các thông điệp tường trình. Đây là lý do tiêu chuẩn cho mỗi mô-đun chỉ cần sử dụng một bộ ghi có cùng tên với chính mô-đun đó. Bằng cách này, ứng dụng sẽ dễ dàng định tuyến các mô-đun khác nhau theo cách khác nhau, nhưng vẫn giữ cho mã nhật ký bên trong mô-đun đơn giản. Mô-đun chỉ yêu cầu hai dòng đơn giản để thiết lập ghi nhật ký và sau đó sử dụng trình ghi nhật ký có tên

Python vào tệp

Sử dụng mô-đun ghi nhật ký để ghi lại các sự kiện trong một tệp rất đơn giản và dễ hiểu. Mô-đun được nhập đơn giản từ thư viện. Trình ghi nhật ký sau đó có thể được tạo và định cấu hình như mong muốn. Một số chu vi có thể được đặt, nhưng điều quan trọng là phải chuyển tên của tệp nơi các sự kiện sẽ được ghi lại

Đây là nơi định dạng của bộ ghi cũng có thể được đặt. Mặc định được đặt thành chế độ chắp thêm, nhưng nếu cần, có thể thay đổi thành chế độ ghi. Ngoài ra, mức logger có thể được thiết lập tại thời điểm này. Điều này sẽ đóng vai trò là ngưỡng cho mục đích theo dõi, dựa trên các giá trị được chỉ định cho từng cấp độ. Một số thuộc tính có thể được truyền dưới dạng tham số. Một danh sách các tham số có sẵn trong Thư viện Python. Các thuộc tính được chọn theo yêu cầu

Một ưu điểm chính của việc ghi nhật ký vào một tệp là ứng dụng không nhất thiết phải tính đến khả năng gặp phải lỗi liên quan đến mạng trong khi truyền nhật ký đến đích bên ngoài. Nếu có bất kỳ vấn đề nào phát sinh khi truyền nhật ký qua mạng, quyền truy cập vào các nhật ký đó sẽ không bị mất vì tất cả chúng đều được lưu trữ cục bộ trên mỗi máy chủ. Một ưu điểm khác của việc ghi nhật ký vào tệp là khả năng tạo thiết lập ghi nhật ký hoàn toàn có thể tùy chỉnh. Các loại nhật ký khác nhau có thể được định tuyến đến các tệp riêng biệt, sau đó được theo đuôi và tập trung với dịch vụ giám sát nhật ký

Cấp độ ghi nhật ký Python là gì?

Các mô-đun ghi nhật ký cần thiết đã là một phần của thư viện chuẩn Python. Vì vậy, nhóm CNTT chỉ cần nhập nhật ký và mọi thứ sẽ hoạt động tốt. Mặc định chứa sáu cấp độ ghi nhật ký tiêu chuẩn cho biết mức độ nghiêm trọng của một sự kiện. đó là

  • Không đặt = 0. Đây là cài đặt mặc định ban đầu của nhật ký khi được tạo. Nó không thực sự phù hợp và hầu hết các nhà phát triển thậm chí sẽ không chú ý đến danh mục này. Trong nhiều vòng kết nối, nó đã trở nên không cần thiết. Nhật ký gốc thường được tạo với mức CẢNH BÁO
  • Gỡ lỗi = 10. Cấp độ này cung cấp thông tin chi tiết, chỉ hữu ích khi sự cố đang được chẩn đoán
  • Thông tin = 20. Điều này được sử dụng để xác nhận rằng mọi thứ đang hoạt động bình thường
  • Cảnh báo = 30. Cấp độ này chỉ ra rằng một điều gì đó bất ngờ đã xảy ra hoặc một số vấn đề sắp xảy ra trong tương lai gần
  • Lỗi = 40. Như nó ngụ ý, một lỗi đã xảy ra. Phần mềm không thể thực hiện một số chức năng
  • Chí mạng = 50. Đã xảy ra lỗi nghiêm trọng. Bản thân chương trình có thể tắt hoặc không thể tiếp tục chạy bình thường

Các nhà phát triển có thể xác định cấp độ của họ, nhưng đây không phải là một phương pháp được khuyến nghị. Các cấp độ trong mô-đun đã được tạo ra qua nhiều năm kinh nghiệm thực tế và được thiết kế để bao gồm tất cả các cơ sở cần thiết. Khi một lập trình viên cảm thấy cần phải tạo các mức tùy chỉnh, thì nên hết sức cẩn thận vì kết quả có thể kém lý tưởng, đặc biệt là khi phát triển thư viện. Điều này là do khi nhiều tác giả thư viện xác định mức tùy chỉnh của họ, đầu ra ghi nhật ký sẽ gần như không thể đối với nhà phát triển sử dụng thư viện để kiểm soát hoặc hiểu vì các giá trị số có thể có ý nghĩa khác nhau

Cách định cấu hình ghi nhật ký Python

Mô-đun ghi nhật ký mà các nhà phát triển cần đã được bao gồm trong thư viện chuẩn Python, có nghĩa là họ có thể triển khai các tính năng ghi nhật ký ngay lập tức mà không cần cài đặt bất kỳ thứ gì. Cách nhanh nhất để định cấu hình tính năng ghi nhật ký theo cách hoạt động của trình ghi nhật ký là sử dụng phương thức basicConfig() của mô-đun ghi nhật ký. Tuy nhiên, theo tài liệu Python, nên tạo một trình ghi nhật ký riêng cho từng mô-đun trong ứng dụng

Có thể khó định cấu hình bộ ghi nhật ký riêng cho từng mô-đun chỉ với basicConfig(). Đó là lý do tại sao hầu hết các ứng dụng sẽ tự động sử dụng hệ thống dựa trên tệp hoặc cấu hình ghi nhật ký từ điển thay thế

Ba tham số chính của basicConfig() là

  • Mức độ. Cấp độ xác định mức độ ưu tiên tối thiểu của các tin nhắn để ghi nhật ký. Tin nhắn sẽ được ghi lại theo thứ tự mức độ nghiêm trọng tăng dần. GỠ LỖI ít đe dọa nhất, THÔNG TIN cũng không nguy hiểm lắm, CẢNH BÁO cần chú ý, LỖI cần chú ý ngay lập tức và TIÊU CHÍ có nghĩa là “bỏ mọi thứ và tìm ra lỗi sai. ” Điểm bắt đầu mặc định là CẢNH BÁO, có nghĩa là mô-đun ghi nhật ký sẽ tự động lọc ra mọi thông báo GỠ LỖI hoặc THÔNG TIN
  • xử lý. Tham số này xác định nơi định tuyến nhật ký. Trừ khi đích được xác định cụ thể, thư viện ghi nhật ký sẽ sử dụng StreamHandler theo bản năng để hướng tất cả các thư đã ghi tới sys. stderr (thường là bảng điều khiển)
  • Định dạng. Cài đặt mặc định cho ghi nhật ký tin nhắn là

Vì mô-đun ghi nhật ký chỉ ghi lại CẢNH BÁO và nhật ký cấp cao hơn theo mặc định, nên có thể thiếu khả năng hiển thị liên quan đến nhật ký có mức độ ưu tiên thấp hơn có thể hữu ích khi cần phân tích nguyên nhân gốc rễ

Ứng dụng chính sẽ có thể định cấu hình nhật ký trong hệ thống con để tất cả các thông báo tường trình đến đúng vị trí. Mô-đun ghi nhật ký trong Python cung cấp nhiều cách để tinh chỉnh điều này, nhưng đối với gần như tất cả các ứng dụng, cấu hình thường khá đơn giản

Nói chung, một cấu hình sẽ bao gồm việc bổ sung bộ định dạng và trình xử lý vào bộ ghi gốc. Vì đây là một thông lệ phổ biến nên mô-đun ghi nhật ký được trang bị một chức năng tiện ích được tiêu chuẩn hóa có tên là basicConfig để xử lý phần lớn các trường hợp sử dụng

Ứng dụng nên định cấu hình nhật ký càng sớm càng tốt trong quy trình. Tốt hơn, đây là điều đầu tiên ứng dụng thực hiện, để các thông báo nhật ký không bị mất trong quá trình khởi động

Các ứng dụng phải được thiết kế để bao bọc một khối try and except xung quanh mã ứng dụng chính cho biết rằng mọi ngoại lệ sẽ được gửi qua giao diện ghi nhật ký chứ không phải tới thiết bị lỗi chuẩn

Định dạng nhật ký Python

Trình định dạng ghi nhật ký Python thêm thông tin ngữ cảnh để nâng cao thông điệp tường trình. Điều này rất hữu ích khi cần thời gian gửi, đích, tên tệp, số dòng, phương thức và các thông tin khác về nhật ký. Ngoài ra, việc thêm luồng và quy trình có thể cực kỳ hữu ích khi gỡ lỗi ứng dụng đa luồng

Đây là một ví dụ đơn giản về những gì xảy ra với nhật ký “hello world” khi nó được gửi qua một trình định dạng nhật ký

“%(asctime)s — %(name)s — %(levelname)s — %(funcName)s. %(lineno)d — %(tin nhắn)s”

trở thành

2018-02-07 19. 47. 41,864 – một. b. c – CẢNH BÁO –. 1 – xin chào thế giới

Định dạng chuỗi trong Python

Với trình định dạng ghi nhật ký Python, việc định dạng chuỗi được thực hiện dễ dàng

Zen cũ của Python nói rằng nên có “một cách rõ ràng để làm điều gì đó trong Python. ” Bây giờ, có bốn cách chính để thực hiện định dạng chuỗi trong Python

1) Định dạng chuỗi Python “Kiểu cũ”

Các chuỗi trong Python được thiết kế với một thao tác tích hợp độc đáo mà các nhà phát triển có thể truy cập bằng thao tác %. Điều này cho phép định dạng vị trí nhanh chóng, đơn giản. Những người quen thuộc với hàm kiểu printf trong C sẽ nhận ra ngay cách hoạt động của thao tác này

Ví dụ

>>> ‘Xin chào, %s’ % tên

"Xin chào Mike"

Trình xác định định dạng %s cho Python biết rằng giá trị của tên phải được thay thế tại vị trí này và được biểu thị dưới dạng chuỗi

Các công cụ xác định định dạng khác có sẵn để giúp lập trình viên kiểm soát tốt hơn định dạng đầu ra. Chẳng hạn, một nhà thiết kế có thể muốn chuyển đổi các số thành ký hiệu thập lục phân hoặc thêm một khoảng trắng nhỏ để tạo các bảng và báo cáo được định dạng tùy chỉnh

Định dạng "kiểu cũ" của cú pháp định dạng chuỗi thay đổi theo những cách nhỏ khi mong muốn thực hiện nhiều thay thế trong một chuỗi đơn lẻ. Vì toán tử % chỉ trả lời một đối số, nên cần có một lớp bọc ở phía bên tay phải trong một bộ.  

2) Python 3 giới thiệu định dạng chuỗi “kiểu mới”

Python 3 đã giới thiệu một cách mới để thực hiện định dạng chuỗi mà sau đó cũng được nâng cấp lên Python 2. 7. Với định dạng chuỗi “kiểu mới” này, toán tử % cú pháp đặc biệt không còn được sử dụng nữa và cú pháp định dạng chuỗi được thực hiện thường xuyên hơn. Định dạng trên một đối tượng chuỗi hiện được xử lý bằng cách gọi lên. định dạng()

Lệnh format() có thể được sử dụng cho các tác vụ vị trí đơn giản giống như các tác vụ có định dạng “kiểu cũ” hoặc nó có thể được gọi là thay thế biến được chỉ định theo tên và được sử dụng theo bất kỳ thứ tự mong muốn nào. Những người làm việc trong DevOps sẽ đồng ý rằng đây là một tính năng khá mạnh mẽ vì nó cho phép dễ dàng sắp xếp lại thứ tự hiển thị mà không thay đổi các đối số được chuyển đến format()

>>> ‘Này {name}, có một 0x{errno. lỗi x}. ’. định dạng(

…     name=tên, errno=errno)

'Này Mike, có lỗi 0xbadc0ffee. ’

Ví dụ này cũng chứng minh rằng cú pháp định dạng biến int dưới dạng chuỗi thập lục phân đã bị thay đổi. Điều cần thiết bây giờ là một thông số kỹ thuật định dạng, có thể được thực hiện bằng cách thêm hậu tố 😡. Ngay lập tức, cú pháp chuỗi định dạng trở nên mạnh mẽ hơn và các trường hợp sử dụng đơn giản hơn không trở nên phức tạp hơn

Khi sử dụng Python 3, định dạng chuỗi “kiểu mới” rất được khuyến khích và nên được ưu tiên hơn kiểu định dạng %. Mặc dù định dạng “kiểu cũ” không còn được nhấn mạnh là tất cả và cuối cùng, nhưng nó không bị phản đối. Python vẫn hỗ trợ phong cách này trong các phiên bản mới nhất của nó

Theo các chuyên gia trong lĩnh vực thảo luận về vấn đề này trong danh sách email của nhà phát triển Python và số phát hành gần đây của trình theo dõi lỗi nhà phát triển Python, định dạng % “cũ” sẽ không còn sớm nữa. Nó vẫn sẽ tồn tại trong một thời gian khá dài. Tài liệu Python 3 chính thức không ủng hộ quan điểm này hoặc đánh giá quá cao về định dạng “kiểu cũ”

“Các thao tác định dạng được mô tả ở đây thể hiện nhiều điểm kỳ quặc dẫn đến một số lỗi phổ biến (chẳng hạn như không hiển thị chính xác các bộ dữ liệu và từ điển). Sử dụng chuỗi ký tự được định dạng mới hơn hoặc str. format() giao diện giúp tránh những lỗi này. Những lựa chọn thay thế này cũng cung cấp các cách tiếp cận mạnh mẽ, linh hoạt và có thể mở rộng hơn để định dạng văn bản. ”

Đây là lý do tại sao phần lớn các nhà phát triển thích đặt lòng trung thành của họ với str. định dạng cho mã mới. Bây giờ, bắt đầu với Python 3. 6, vẫn còn một cách sáng tạo khác để định dạng chuỗi

3) Nội suy chuỗi

Với sự ra đời của Python 3. 6, một cách định dạng chuỗi mới đã được thêm vào. Cái này được gọi là chuỗi ký tự được định dạng hoặc đơn giản là “f-strings. ” Cách tiếp cận mới này để định dạng chuỗi cho phép các nhà phát triển sử dụng các biểu thức Python được nhúng trong các hằng chuỗi. Đây là một ví dụ đơn giản về cảm giác của tính năng này

>>> f'Xin chào, {name}. ’

'Xin chào Mike. ’

Rõ ràng là hằng chuỗi có tiền tố là chữ “f” — đó là lý do tại sao nó được gọi là “f-strings. ” Cú pháp định dạng mới mạnh mẽ này cho phép lập trình viên nhúng các biểu thức Python tùy ý, bao gồm các bài toán phức tạp. Các chuỗi ký tự được định dạng mới do Python tạo ra được coi là một tính năng phân tích cú pháp duy nhất được tạo để chuyển đổi các chuỗi f thành một chuỗi các hằng số và biểu thức chuỗi. Sau đó, họ được kết nối để xây dựng chuỗi cuối cùng

Nhìn vào hàm hello() này có chứa một chuỗi f

>>> lời chào chắc chắn (tên, câu hỏi)

… return f”Xin chào, {name}. Bạn có khỏe không {câu hỏi}?

>>> chào('Mike', 'bạn có phải không')

"Xin chào Mike. Bạn có khỏe không?"

Bằng cách tháo rời hàm và kiểm tra những gì đang xảy ra đằng sau hậu trường, có thể dễ dàng thấy rằng chuỗi f trong hàm đang được chuyển đổi thành một thứ tương tự như những gì được hiển thị ở đây

>>> lời chào chắc chắn (tên, câu hỏi)

… trả về “Xin chào,” + tên + “. Làm thế nào là ” + câu hỏi + “?”

Việc triển khai thực tế nhanh hơn một chút vì nó sử dụng opcode BUILD_STRING làm tối ưu hóa. Tuy nhiên, về mặt chức năng, khái niệm này giống nhau

4) Chuỗi mẫu

Một công cụ đặc biệt nữa để định dạng chuỗi trong Python là phương thức chuỗi mẫu. Đây là một cơ chế đơn giản hơn nhưng kém mạnh mẽ hơn, nhưng khi nói đến chức năng, nó có thể là câu trả lời mà các nhà phát triển đang tìm kiếm. Nhìn vào lời chào đơn giản này

>>> từ Mẫu nhập chuỗi

>>> t = Mẫu ('Này, tên $. ’)

>>> t. thay thế (tên = tên)

'Chào Mike

Lớp mẫu từ mô-đun chuỗi tích hợp của Python phải được nhập. Mẫu đã tạo mã này một cách nhanh chóng và dễ dàng. Các chuỗi mẫu không phải là một tính năng ngôn ngữ cốt lõi, nhưng chúng được cung cấp bởi mô-đun chuỗi trong thư viện Python tiêu chuẩn

Một yếu tố khác phân biệt định dạng này với các định dạng khác là các chuỗi mẫu không cho phép định dạng định dạng. Điều này có nghĩa là để ví dụ về chuỗi lỗi trước đó hoạt động, số lỗi int sẽ phải được chuyển đổi thủ công thành chuỗi hex

Vì vậy, khi nào nên sử dụng chuỗi mẫu trong chương trình Python? . Vì chúng không quá phức tạp nên các chuỗi mẫu thường là lựa chọn an toàn hơn nhiều khi phục vụ đối tượng mới làm quen

Lỗi và Ngoại lệ trong Xử lý Python

Lỗi cú pháp hoặc phân tích cú pháp là những cảnh báo phổ biến nhất. Trình phân tích cú pháp sẽ lặp lại dòng sai và chỉ đến nơi phát hiện lỗi đầu tiên. Điều này có thể dễ dàng khắc phục bằng cách nhập dữ liệu bị thiếu

Một ngoại lệ xảy ra khi một lỗi được phát hiện trong quá trình thực hiện. Một câu lệnh có thể đúng về mặt cú pháp, nhưng không thể hoàn thành chức năng. Đây không phải là một lỗi nghiêm trọng và do đó có thể được xử lý dễ dàng. Tuy nhiên, chương trình sẽ không tự động xử lý sự cố. Lập trình viên sẽ phải tìm dòng bị lỗi và giải quyết thủ công

Ngoài ra, chương trình có thể được viết để xử lý một số ngoại lệ nhất định, có thể dự đoán được. Người dùng sẽ được yêu cầu nhập một số nguyên hợp lệ. Tuy nhiên, người dùng có thể ngắt chương trình bằng lệnh Control-C hoặc

Đây là cách câu lệnh try hoạt động

  • Đầu tiên, “mệnh đề thử” (là câu lệnh nằm giữa từ khóa thử và từ khóa ngoại trừ) được đưa vào hoạt động
  • Nếu một ngoại lệ không xảy ra, mệnh đề ngoại trừ sẽ bị bỏ qua và phần thực hiện của mệnh đề thử đã hoàn thành
  • Nếu một ngoại lệ xảy ra trong quá trình thực thi mệnh đề try, tất cả các phần khác của mệnh đề sẽ bị bỏ qua. Nếu loại khớp với ngoại lệ được đặt tên sau từ khóa except được chỉ định, thì mệnh đề ngoại trừ được đưa vào hoạt động. Việc thực thi sau đó tiếp tục sau mệnh đề try
  • Trong trường hợp xảy ra ngoại lệ không khớp với ngoại lệ được đặt tên trong mệnh đề ngoại trừ, thì nó sẽ được chuyển sang câu lệnh thử bên ngoài. Khi không tìm thấy trình xử lý, nó sẽ trở thành một ngoại lệ chưa được xử lý và giai đoạn thực thi sẽ dừng lại và thông báo lỗi được hiển thị

Một câu lệnh try thường sẽ chứa nhiều hơn một mệnh đề except để chỉ định tốt hơn các trình xử lý cho các ngoại lệ khác nhau. Tuy nhiên, cùng lắm thì quá trình thực hiện sẽ chỉ dành cho một người xử lý. Một trình xử lý sẽ chỉ xử lý các ngoại lệ xảy ra trong câu lệnh thử tương ứng, không xử lý các ngoại lệ xảy ra trong các trình xử lý khác của cùng một câu lệnh thử. Mệnh đề ngoại trừ thường sẽ đặt tên cho nhiều ngoại lệ được đặt bên trong dưới dạng một bộ được đặt trong ngoặc đơn

Phần kết luận

Python là một ngôn ngữ phổ biến vì nó dễ sử dụng, cực kỳ linh hoạt và cung cấp một hệ sinh thái lớn các công cụ của bên thứ ba. Nó đủ linh hoạt để đáp ứng nhiều tình huống khác nhau, từ ứng dụng web đến thư viện khoa học dữ liệu, tập lệnh SysAdmin và nhiều loại chương trình khác

Ghi nhật ký Python rất đơn giản và được chuẩn hóa tốt, do khung ghi nhật ký mạnh mẽ của nó được tích hợp ngay trong thư viện chuẩn

Mỗi mô-đun chỉ cần ghi mọi thứ vào một bản ghi nhật ký cho mỗi tên mô-đun. Bằng cách này, ứng dụng sẽ dễ dàng định tuyến tất cả các thông điệp tường trình của các mô-đun khác nhau đến đúng nơi

Sau đó, các ứng dụng có thể chọn tùy chọn tốt nhất để định cấu hình nhật ký. Tuy nhiên, trong cơ sở hạ tầng hiện đại, việc tuân theo các phương pháp hay nhất sẽ đơn giản hóa rất nhiều toàn bộ quy trình

Ghi nhật ký gỡ lỗi có nghĩa là gì?

Ghi nhật ký gỡ lỗi là quy trình khắc phục sự cố thu thập một lượng lớn thông tin và nhật ký hệ thống để giúp tìm ra sự cố . Chúng tôi khuyên bạn chỉ nên bật tính năng này trong một thời gian ngắn vì các tệp nhật ký có thể trở nên rất lớn trên thiết bị cuối.

Việc sử dụng đăng nhập trong Python là gì?

Ghi nhật ký là phương tiện theo dõi các sự kiện xảy ra khi một số phần mềm chạy . Ghi nhật ký rất quan trọng để phát triển, gỡ lỗi và chạy phần mềm. Nếu bạn không có bất kỳ bản ghi nhật ký nào và chương trình của bạn gặp sự cố, có rất ít khả năng bạn phát hiện ra nguyên nhân của sự cố.

Sự khác biệt giữa ghi nhật ký gỡ lỗi và ghi thông tin Python là gì?

GỠ LỖI. Thông tin thú vị dành cho Nhà phát triển, khi cố gắng gỡ lỗi sự cố. THÔNG TIN. Thông tin thú vị dành cho nhân viên Hỗ trợ đang cố gắng tìm ra ngữ cảnh của một lỗi nhất định. CẢNH BÁO để FATAL. Sự cố và Lỗi tùy theo mức độ hư hỏng