Sự khác nhau giữa warnings.warn() và logging.warn() về những gì chúng làm và cách chúng được sử dụng?Cảnh báo Python.warn() so với logging.warning()
Trả lời
Một trường hợp ngoại lệ có thể bị bắt hoặc bỏ qua như mong muốn và tùy chọn khác thêm mục nhập vào nhật ký dựa trên mức ghi nhật ký hiện tại. Một nên được sử dụng khi một là cảnh báo về những thứ khác nhau trong mã, và khác nên được sử dụng khi đăng nhập.
Tôi đồng ý với câu trả lời khác - logging
để đăng nhập và warning
là để cảnh báo - nhưng tôi muốn thêm chi tiết hơn.
Dưới đây là HOWTO theo phong cách hướng dẫn đưa bạn qua các bước trong việc sử dụng mô-đun logging
. http://docs.python.org/2/howto/logging.html
Nó trực tiếp trả lời câu hỏi của bạn:
warnings.warn() trong mã thư viện nếu vấn đề này có thể tránh được và ứng dụng khách hàng nên được sửa đổi để loại bỏ các cảnh báo
logging.warning() nếu không có ứng dụng nào của khách hàng có thể thực hiện về trường hợp này, nhưng sự kiện vẫn cần được lưu ý
logging.warning
chỉ ghi lại nội dung ở cấp độ WARNING
, giống như cách logging.info
nhật ký ở mức INFO
và logging.error
nhật ký ở cấp ERROR
. Nó không có hành vi đặc biệt.
warnings.warn
phát ra một Warning
, mà có thể được in để stderr
, bỏ qua hoàn toàn, hoặc ném giống như một bình thường Exception
(có khả năng đâm ứng dụng của bạn) phụ thuộc vào chính xác Warning
lớp con phát ra và làm thế nào bạn đã cấu hình Cảnh báo của bạn Lọc. Theo mặc định, các cảnh báo sẽ được in thành stderr
hoặc bị bỏ qua.
Cảnh báo phát ra bởi warnings.warn
thường hữu ích để biết, nhưng dễ bỏ sót (đặc biệt nếu bạn đang chạy chương trình Python trong quá trình nền và không chụp stderr
). Vì lý do đó, có thể hữu ích khi họ đăng nhập. Python cung cấp tích hợp tích hợp giữa mô-đun logging
và mô-đun warnings
để cho phép bạn thực hiện việc này; chỉ cần gọi logging.captureWarnings(True)
khi bắt đầu tập lệnh của bạn và tất cả cảnh báo được phát ra bởi mô-đun warnings
sẽ tự động được ghi lại ở cấp WARNING
.
Bên cạnh canonical explanation in official documentation
warnings.warn() trong mã thư viện nếu vấn đề này có thể tránh được và ứng dụng client nên được sửa đổi để loại bỏ các cảnh báo
logging.warning() nếu không có gì là ứng dụng khách có thể thực hiện về trường hợp này, nhưng sự kiện vẫn cần được lưu ý
Điều đáng lưu ý là theo mặc định warnings.warn("same message")
sẽ chỉ hiển thị một lần. Đó là một sự khác biệt đáng chú ý lớn.Được trích dẫn từ official doc
Sự lặp lại cảnh báo cụ thể cho cùng một vị trí nguồn thường bị loại bỏ.
>>> import warnings
>>> warnings.warn("foo")
__main__:1: UserWarning: foo
>>> warnings.warn("foo")
>>> warnings.warn("foo")
>>>
>>> import logging
>>> logging.warn("bar")
WARNING:root:bar
>>> logging.warn("bar")
WARNING:root:bar
>>> logging.warn("bar")
WARNING:root:bar
>>>
>>>
>>> warnings.warn("fur")
__main__:1: UserWarning: fur
>>> warnings.warn("fur")
>>> warnings.warn("fur")
>>>
- 1. Cảnh báo so sánh hiệu chỉnh trong g + +
- 2. “Cảnh báo: so sánh là luôn luôn đúng”
- 3. Cảnh báo cảnh báo AVCam thấp
- 4. g ++ hoặc gcc tùy chọn để nhận thông báo cảnh báo với id cảnh báo
- 5. Cảnh báo: so sánh với chuỗi ký tự kết quả trong hành vi không xác định
- 6. hành vi cảnh báo Strange với gcc và ký/so sánh unsigned
- 7. Sử dụng giải mã() so với regex để hủy cảnh báo chuỗi này
- 8. Cảnh báo: So sánh liên tục 8 với biểu hiện của loại XXXX luôn là sai
- 9. DbUnit - Cảnh báo: AbstractTableMetaData
- 10. Sự khác biệt giữa logging.warn và logging.warning bằng Python là gì? Hoặc la họ giông nhau?
- 11. cảnh báo iconv deprecation với ruby 1.9.3
- 12. Cảnh báo JavaScript với 3 nút
- 13. Kiểm tra cảnh báo javascript với Capybara
- 14. PHP5.3 - mysqli_stmt: bind_params với cảnh báo call_user_func_array
- 15. Xử lý cảnh báo với UIAutomation
- 16. Eclipse Cảnh báo với Java HashMap
- 17. Eclipse: mâu thuẫn với lời cảnh báo
- 18. RESTEasy Mock so với Ngoại lệ Mapper so với bối cảnh
- 19. Mã hóa so với thông báo
- 20. Tắt cảnh báo cảnh báo không an toàn mysql
- 21. cảnh báo :: loại cảnh báo và FATAL trong Perl
- 22. C cảnh báo tiềm ẩn cảnh báo chức năng 'thoát'
- 23. Cảnh báo với boost :: chia khi biên dịch
- 24. Cảnh báo với một số tùy chọn với jQuery
- 25. Cảnh báo GCC [Wuninitialized]
- 26. Deprecation cảnh báo: #apply_finder_options
- 27. ics có cảnh báo?
- 28. Cảnh báo trên EditText
- 29. FindBugs Cảnh báo RV_ABSOLUTE_VALUE_OF_RANDOM_INT
- 30. Interface Builder cảnh báo