2012-03-07 23 views

Trả lời

8

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.

35

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 ý

16

logging.warning chỉ ghi lại nội dung ở cấp độ WARNING, giống như cách logging.info nhật ký ở mức INFOlogging.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.

6

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") 
>>> 
Các vấn đề liên quan