Computer >> Máy Tính >  >> Lập trình >> Python

Kiểm soát cảnh báo trong các chương trình Python

Cảnh báo khác với lỗi trong chương trình. Nếu gặp lỗi, chương trình Python sẽ kết thúc ngay lập tức. Mặt khác, cảnh báo là không gây tử vong. Nó hiển thị một số thông báo nhưng chương trình vẫn tiếp tục. Cảnh báo được đưa ra để cảnh báo người dùng về một số điều kiện nhất định không phải là ngoại lệ. Thông thường, cảnh báo xuất hiện nếu phát hiện thấy một số cách sử dụng không được dùng nữa đối với một số phần tử lập trình như từ khóa / hàm / lớp, v.v..

Các thông báo cảnh báo được hiển thị bằng hàm warning () được định nghĩa trong mô-đun 'cảnh báo' của thư viện chuẩn của Python. Cảnh báo thực sự là một lớp con của Ngoại lệ trong hệ thống phân cấp lớp dựng sẵn. Có một số lớp con Cảnh báo được tích hợp sẵn. Lớp con do người dùng xác định cũng có thể được định nghĩa.

Cảnh báo
Đây là lớp cơ sở của tất cả các lớp danh mục cảnh báo.
Cảnh báo người dùng
Danh mục mặc định cho warning ().
Ngưng sử dụng Cảnh báo
cảnh báo về các tính năng không dùng nữa khi những cảnh báo đó dành cho nhà phát triển
Cảnh báo cú pháp
cảnh báo về các tính năng cú pháp không rõ ràng.
Thời gian chạy Cảnh báo
cảnh báo về các tính năng thời gian chạy không rõ ràng.
FutureWarning
cảnh báo về các tính năng không dùng nữa khi những cảnh báo đó dành cho người dùng cuối.
Đang chờ xử lý
cảnh báo về các tính năng sẽ không được dùng nữa trong tương lai
ImportWarning
cảnh báo được kích hoạt trong quá trình nhập mô-đun
UnicodeWarning
cảnh báo liên quan đến Unicode.
BytesWarning
cảnh báo liên quan đến byte và mảng byte.
ResourceWarning
cảnh báo liên quan đến việc sử dụng tài nguyên.

Ví dụ cảnh báo

Đoạn mã sau xác định một lớp có một phương thức không dùng nữa và một phương thức được lên lịch để không dùng nữa trong phiên bản tương lai của lớp đã nói.

# warningexample.py
import warnings
class WarnExample:
   def __init__(self):
      self.text = "Warning"

def method1(self):
   warnings.warn(
      "method1 is deprecated, use new_method instead",
      DeprecationWarning
   )
   print ('method1', len(self.text))
   def method2(self):
      warnings.warn(
         "method2 will be deprecated in version 2, use new_method instead",
         PendingDeprecationWarning
      )
      print ('method2', len(self.text))
   def new_method(self):
   print ('new method', len(self.text))
if __name__=='__main__':
   e = WarnExample()
   e.method1()
   e.method2()
   e.new_method()

Nếu tập lệnh trên được thực thi từ dấu nhắc lệnh dưới dạng

E:\python37>python warningexample.py

Không có thông báo cảnh báo nào được hiển thị trên thiết bị đầu cuối. Để làm được điều đó, bạn phải sử dụng công tắc _Wd như bên dưới

E:\python37>python -Wd warningexample.py
warningexample.py:10: DeprecationWarning: method1 is deprecated, use new_method instead
DeprecationWarning
method1 7
warningexample.py:19: PendingDeprecationWarning: method2 will be deprecated in version 2, use new_method instead
PendingDeprecationWarning
method2 7
new method 7

Tương tự, phiên tương tác sau cũng không hiển thị bất kỳ thông báo cảnh báo nào.

E:\python37>python
>>> from warningexample import WarnExample
>>> e = WarnExample()
>>> e.method1()
method1 7
>>> e.method2()
method2 7
>>> e.new_method()
new method 7

Bạn phải bắt đầu phiên Python với –Wd

E:\python37>python -Wd
>>> from warningexample import WarnExample
>>> e=WarnExample()
>>> e.method1()
E:\python37\warningexample.py:10: DeprecationWarning: method1 is deprecated, use new_method instead
DeprecationWarning
method1 7
>>> e.method2()
E:\python37\warningexample.py:17: PendingDeprecationWarning: method2 will be deprecated in version 2, use new_method instead
PendingDeprecationWarning
method2 7
>>> e.new_method()
new method 7

Bộ lọc cảnh báo

Bộ lọc cảnh báo kiểm soát xem cảnh báo có bị bỏ qua, hiển thị hay chuyển thành lỗi (nâng cao ngoại lệ).

Lỗi
Hành động
Ý nghĩa

Chuyển cảnh báo thành một ngoại lệ.
bỏ qua
Hủy cảnh báo.
luôn
Luôn phát ra cảnh báo.
mặc định
In cảnh báo lần đầu tiên nó được tạo từ mỗi vị trí.
mô-đun
In cảnh báo lần đầu tiên nó được tạo từ mỗi mô-đun.
một lần
In cảnh báo lần đầu tiên nó được tạo.

Phiên tương tác sau sẽ đặt bộ lọc thành mặc định bởi hàm simplefilter ().

E:\python37>python
>>> import warnings
>>> warnings.simplefilter('default')
>>> from warningexample import WarnExample
>>> e=WarnExample()
>>> e.method1()
E:\python37\warningexample.py:10: DeprecationWarning: method1 is deprecated, use new_method instead
DeprecationWarning
method1 7
>>> e.method2()
E:\python37\warningexample.py:17: PendingDeprecationWarning: method2 will be deprecated in version 2, use new_method instead
PendingDeprecationWarning
method2 7
>>> e.new_method()
new method 7

Để tạm thời loại bỏ các cảnh báo, hãy đặt simplefilter thành 'bỏ qua'.

import warnings

def function():
warnings.warn("deprecated", DeprecationWarning)

with warnings.catch_warnings():
warnings.simplefilter("ignore")
function()