Hướng dẫn python log decorator hackerrank solution - giải pháp hackerrank trang trí nhật ký python
Mọi người đều ổn trong chức năng của bạn. Bạn dường như bị mất với các đối số từ khóa và vị trí và từ khóa. Show
Hãy để tôi giải thích: Đối số vị trí, 0 Trong trường hợp của bạn, là bắt buộc (và có thể có các giá trị mặc định). Các đối số khác là tùy chọn. Nếu bạn muốn đưa ra một đối số bắt buộc hoặc có giá trị mặc định, hãy đặt nó trước *args và ** kwargs. Nhưng hãy nhớ rằng bạn không thể cung cấp một đối số hai lần:
Có một cách khác, nhưng không thể đọc được, để có các giá trị mặc định cho các đối số và không có đối số vị trí:
Chức năng của bạn phân tích các đối số là OK, mặc dù tôi không hiểu tại sao bạn viết 1 và 2 vào 3. Nó vượt qua các đối số một cách trong suốt: Thông báo để ghi nhật ký tiều phu
không
Tên biến người ta có thể sử dụng trong thông báo để tham khảo ngoại lệ bị bắt được nêu trong hàm được trang trí> ví dụ: @log_on_error (lỗi, "lỗi là: {e! r}", ...) mặc định: "e" Callable_format_varable Tên biến người ta có thể sử dụng trong thông báo để tham khảo các cuộc gọi được trang trí có thể gọi được. ví dụ. @log_on_start (lỗi, "được gọi là {callable .__ Tên __: s}", ...) Mặc định: "Callable" log_exception / async_log_exception Sự mô tả mức đăng nhậpVâng $ pip install logdecorator Mức nhật ký mà tin nhắn nên được gửitl;drimport logging import requests from logdecorator import log_on_start, log_on_end, log_on_error, log_exception @log_on_start(logging.DEBUG, "Start downloading {url:s}...") @log_on_error(logging.ERROR, "Error on downloading {url:s}: {e!r}", on_exceptions=IOError, reraise=True) @log_on_end(logging.DEBUG, "Downloading {url:s} finished successfully within {result.elapsed!s}") def download(url): # some code response = requests.get(url) # some more code return response logging.basicConfig(level=logging.DEBUG) download("https://www.sighalt.de") # DEBUG:__main__:Start downloading https://www.sighalt.de... # DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): www.sighalt.de # DEBUG:urllib3.connectionpool:https://www.sighalt.de:443 "GET / HTTP/1.1" 200 None # DEBUG:__main__:Downloading https://www.sighalt.de finished successfully within 0:00:00.130960 download("https://www.sighalt.der") # DEBUG:__main__:Start downloading https://www.sighalt.der... # DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): www.sighalt.der # ERROR:__main__:Error on downloading https://www.sighalt.der: ConnectionError(MaxRetryError(" # HTTPSConnectionPool(host='www.sighalt.der', port=443): Max retries exceeded with url: / # (Caused by NewConnectionError(' thông điệpThông báo để ghi nhật ký def download(): # some download code pass if __name__ == "__main__": download() tiều phu import logging from .exceptions import MyException1, MyException2 logger = logging.getLogger(__name__) def download(): logger.debug("Start downloading") # some download code logger.debug("Downloading finished successfully") if __name__ == "__main__": try: download() except (MyException1, MyException2): logger.error("Error on downloading") raise Một đối tượng logger thay thế. Nếu không có logger nào được cung cấp logdecorator, hãy tạo một đối tượng logger với tên của mô -đun, hàm được trang trí nằm trong ( 7) mặc định: Tạo một logger mới với tên 7người xử lý import logging from logdecorator import log_on_start, log_on_end, log_on_error from .exceptions import MyException1, MyException2 @log_on_start(logging.DEBUG, "Start downloading") @log_on_error(logging.ERROR, "Error on downloading", on_exceptions=(MyException1, MyException2), reraise=True) @log_on_end(logging.DEBUG, "Downloading finished successfully") def download(): # some download code if __name__ == "__main__": download() Một đối tượng xử lý nhật ký tùy chỉnh. Chỉ có sẵn nếu không có đối tượng logger được đưa ra. on_exceptionsMột tuple chứa các lớp ngoại lệ hoặc một ngoại lệ duy nhất, sẽ bị bắt và kích hoạt việc ghi nhật ký của bộ trang trí def x(a = 1, b = 2, *args, **kwargs): print a, b, args, kwargs def y(*args, **kwargs): x(*args, **kwargs) >>> y(3, 4, 5, 6) 3 4 (5, 6) {} >>> y(3, 4, 5, b=6) TypeError: x() got multiple values for keyword argument 'b' 3. Mặc định: tuple () (không có ngoại lệ nào bị bắt)Kiểm soát nếu các ngoại lệ bị bắt sẽ được rera hóa sau khi đăng nhập. Mặc định: Sai
Tên biến người ta có thể sử dụng trong thông báo để tham khảo ngoại lệ bị bắt được nêu trong hàm được trang trí, ví dụ: @log_on_error (lỗi, "lỗi là: {e! r}", ...) mặc định: "e" LogDecorator
Di chuyển mã đăng nhập ra khỏi logic kinh doanh của bạn với các nhà trang trí Python. Ghi nhật ký là một công cụ đẹp trong hộp công cụ của bạn để truy tìm các lỗi và hiểu rõ hơn về cách ứng dụng của bạn hoạt động trong sản xuất. Nhưng nếu bạn giống như tôi, bạn thường bỏ qua mã ghi nhật ký, vì vậy nó sẽ không ẩn logic kinh doanh hoặc có mã của bạn với độ phức tạp.May mắn thay, người trang trí Pythons hiện đã đến giải cứu của chúng tôi và cung cấp cho chúng tôi một thư viện đẹp để thêm ghi nhật ký vào mã của chúng tôi mà không ăn cắp khả năng đọc và dễ hiểu. Nếu bạn muốn biết thêm về ý định đằng sau LogDecorator, hãy xem bài đăng trên blog của tôi. import logging from logdecorator import log_on_start from .exceptions import MyException1, MyException2 @log_on_start(logging.DEBUG, "Start downloading '{url:s}'") def download(url): # some download code if __name__ == "__main__": download("http://my.file.com/file.bin") CẬP NHẬT: LogDecorator == 2.0 Cảm ơn tất cả những người phụ thuộc :) Tôi vừa phát hành một phiên bản mới của LogDecorator (2.0). Bạn có thể đọc các thay đổi tại blog của tôi hoặc trong Changelog.Cài đặtCài đặt dễ dàng như nó có thể nhận được:
Sự mô tả
người xử lý
người xử lý
người xử lý
|