Cảnh báo bộ lọc trong python là gì?

Cảnh báo là một mô-đun thử nghiệm cố gắng cung cấp khả năng kiểm soát mạnh mẽ và linh hoạt hơn đối với các cảnh báo của python. Nó chủ yếu cho phép bạn không chỉ lọc các cảnh báo tùy thuộc vào mô-đun kích hoạt cảnh báo mà còn lọc tùy thuộc vào nơi cảnh báo đến từ đâu

Sử dụng trực tiếp

Thay thế cách nhập thông thường của bạn đối với warnings.warn, warnings.warn_explicitwarnings.filter bằng cách nhập tương tự từ warn, hãy sử dụng chúng như bình thường trừ khi bạn có một số tùy chọn bổ sung

Để phát ra một cảnh báo

import warn

warn.warn["I can use the as usual; this is awesone",
          DeprecationWarning,
          stacklevel=1 ]

Để thêm cảnh báo bộ lọc, hãy sử dụng chức năng

import warn

warn.filter['default', DeprecationWarning, module='__main__']
0 như bình thường

import warn

warn.filter['default', DeprecationWarning, module='__main__']

Sử dụng miễn là bạn không sử dụng tùy chọn cụ thể của warn, việc sử dụng

import warn

warn.filter['default', DeprecationWarning, module='__main__']
2 sẽ có tác dụng chính xác giống như gọi warnings.filter và ảnh hưởng đến tất cả các cảnh báo được phát ra

Chức năng bổ sung

Chức năng bổ sung chính của mô-đun cảnh báo là có thể lọc các cảnh báo không chỉ bởi những gì _trigger_ chúng, mà cả những gì _emit_ chúng. Ví dụ

# dependency.py

import warn

def deprecated_function[]:
    # the warning is emitted here
    warn.warning["I am a deprecation warning",
                 DeprecationWarning,
                 stacklevel=2

# downstream.py

from dependency import deprecated_function

def feature[]:
    # I will trigger the warning.
    deprecated_function[]

Mặc dù thư viện chuẩn của Python chỉ cho phép lọc theo mô-đun _trigger_ cảnh báo [ở trên mô-đun

import warn

warn.filter['default', DeprecationWarning, module='__main__']
4 và điều này chỉ khi
import warn

warn.filter['default', DeprecationWarning, module='__main__']
5 đặt chính xác
import warn

warn.filter['default', DeprecationWarning, module='__main__']
6, warn cho phép bạn lọc tùy thuộc vào mô-đun _emitter_ [ở đây
import warn

warn.filter['default', DeprecationWarning, module='__main__']
8]. Để làm như vậy, hãy sử dụng từ khóa
import warn

warn.filter['default', DeprecationWarning, module='__main__']
9 của
import warn

warn.filter['default', DeprecationWarning, module='__main__']
2, từ khóa này nhận một chuỗi hoặc một biểu thức chính quy

import warn

warn.filterwarnings['error', DeprecationWarning, emodule='dependency']

Khỉ Vá thư viện chuẩn

Chức năng của cảnh báo thường chỉ khả dụng nếu bạn sử dụng rõ ràng các chức năng được hiển thị warn. Mặc dù đôi khi có thể hữu ích khi sử dụng chức năng cảnh báo với mô-đun sử dụng thư viện tiêu chuẩn

# dependency.py

import warn

def deprecated_function[]:
    # the warning is emitted here
    warn.warning["I am a deprecation warning",
                 DeprecationWarning,
                 stacklevel=2
2

Đối với trường hợp sử dụng này, chúng tôi cung cấp chức năng

# dependency.py

import warn

def deprecated_function[]:
    # the warning is emitted here
    warn.warning["I am a deprecation warning",
                 DeprecationWarning,
                 stacklevel=2
3 sẽ thay thế khỉ vá thư viện tiêu chuẩn và tự động cung cấp chức năng của warn cho tất cả các mô-đun được nhập sau khi áp dụng bản vá

Chức năng

# dependency.py

import warn

def deprecated_function[]:
    # the warning is emitted here
    warn.warning["I am a deprecation warning",
                 DeprecationWarning,
                 stacklevel=2
5 cũng được cung cấp và cố gắng hủy bản vá của
# dependency.py

import warn

def deprecated_function[]:
    # the warning is emitted here
    warn.warning["I am a deprecation warning",
                 DeprecationWarning,
                 stacklevel=2
2. Mặc dù bất kỳ mô-đun nào giữ lại tham chiếu đến hàm warn,
# dependency.py

import warn

def deprecated_function[]:
    # the warning is emitted here
    warn.warning["I am a deprecation warning",
                 DeprecationWarning,
                 stacklevel=2
8 và
import warn

warn.filter['default', DeprecationWarning, module='__main__']
0 vẫn sẽ sử dụng các chức năng của mô-đun warn

# dependency.py

import warn

def deprecated_function[]:
    # the warning is emitted here
    warn.warning["I am a deprecation warning",
                 DeprecationWarning,
                 stacklevel=2
3 và
# dependency.py

import warn

def deprecated_function[]:
    # the warning is emitted here
    warn.warning["I am a deprecation warning",
                 DeprecationWarning,
                 stacklevel=2
5 giữ số lượng tham chiếu về số lần từng được gọi để gỡ bản vá chỉ khi cần thiết, do đó sẽ an toàn khi lồng các cuộc gọi

# dependency.py

import warn

def deprecated_function[]:
    # the warning is emitted here
    warn.warning["I am a deprecation warning",
                 DeprecationWarning,
                 stacklevel=2
3 cũng có thể được sử dụng làm trình quản lý bối cảnh để tự động hủy bản vá khi thoát khỏi trình quản lý bối cảnh

Nhập và sử dụng Styleguide

Do tính chất thử nghiệm của mô-đun này, nên có một số hướng dẫn về phong cách khuyên kỳ lạ. Cụ thể, bạn được khuyến khích sử dụng tên đủ điều kiện khi gọi nhập, cả khi sử dụng mô-đun warn cũng như khi sử dụng mô-đun

# dependency.py

import warn

def deprecated_function[]:
    # the warning is emitted here
    warn.warning["I am a deprecation warning",
                 DeprecationWarning,
                 stacklevel=2
2 của thư viện tiêu chuẩn. Ví dụ

import warnings

warnings.warn['This is a good way of using warning']

########

from warnings import warn

warn['Advance features of `warn` will not be available....']

Bản vá khỉ và mô-đun đã biên dịch

Biên dịch các mô-đun truy cập trực tiếp vào triển khai C của mô-đun

# downstream.py

from dependency import deprecated_function

def feature[]:
    # I will trigger the warning.
    deprecated_function[]
6. Do đó, Monkey Patching không có tác dụng. Chúng tôi nhận thức được sự hạn chế

Làm thế nào nó hoạt động

Bộ lọc cảnh báo Python được yêu cầu phải là bộ năm với các loại và giá trị bị hạn chế, đặc biệt là để tương thích với việc triển khai c hiệu quả của thư viện tiêu chuẩn python

Để tương tác với thư viện tiêu chuẩn

# dependency.py

import warn

def deprecated_function[]:
    # the warning is emitted here
    warn.warning["I am a deprecation warning",
                 DeprecationWarning,
                 stacklevel=2
2, khi sử dụng chức năng cụ thể của warn, chúng tôi thực sự đưa một bộ năm giả mạo không hoạt động vào
# downstream.py

from dependency import deprecated_function

def feature[]:
    # I will trigger the warning.
    deprecated_function[]
9 và sử dụng nó làm khóa cho proxy-dict lưu trữ các tham số thực tế

Điều này cho phép hoàn toàn tương thích ngược với mô-đun cảnh báo và đảm bảo rằng trong trường hợp xấu nhất, các quy tắc bạn đặt bằng cách sử dụng mô-đun warn sẽ không có tác dụng

Chúng tôi thực sự hoan nghênh bất kỳ sửa đổi nào đối với Core Python cho phép có các bộ lọc cảnh báo tùy chỉnh để làm cho điều này ít bị hack hơn

Khi nào thì sử dụng warn

import warn

warn.filterwarnings['error', DeprecationWarning, emodule='dependency']
2 vẫn đang trong quá trình thử nghiệm và chúng tôi chưa khuyến nghị đưa nó vào sản xuất. Đầu tiên, vì đây là triển khai python thuần túy, tùy thuộc vào số lượng cảnh báo mà cơ sở mã của bạn có, bạn có thể nhận thấy hiệu suất giảm

import warn

warn.filterwarnings['error', DeprecationWarning, emodule='dependency']
2 cực kỳ thú vị cho thử nghiệm tích hợp và thử nghiệm đơn vị. Đặc biệt, chúng tôi khuyên bạn nên bật có chọn lọc cảnh báo là lỗi cho tất cả các phụ thuộc trực tiếp của mình. Điều này thường khả thi với mô-đun cảnh báo python mặc định, trừ khi cảnh báo được đưa ra tại thời điểm nhập hoặc nếu thư viện cơ bản không sử dụng từ khóa
import warn

warn.filter['default', DeprecationWarning, module='__main__']
6. Nói chung, bạn có thể muốn xem xét bật cảnh báo là lỗi trên toàn cầu và tắt chúng trên cơ sở từng mô-đun nếu bạn quyết định chúng là dương tính giả

import warn

warn.filterwarnings['error', DeprecationWarning, emodule='dependency']
2 cũng cực kỳ hữu ích khi phát triển cục bộ để đảm bảo bạn phát triển mã của mình càng sớm càng tốt mà không cần sử dụng chức năng có thể bị xóa trong tương lai gần

Cảnh báo có nghĩa là gì trong Python?

Các thông báo cảnh báo thường được đưa ra trong các tình huống hữu ích khi cảnh báo người dùng về một số điều kiện trong chương trình, trong đó điều kiện đó [thông thường] không đảm bảo đưa ra một ngoại lệ và chấm dứt chương trình. Ví dụ: người ta có thể muốn đưa ra cảnh báo khi chương trình sử dụng mô-đun lỗi thời

Cảnh báo không dùng nữa trong Python là gì?

Cảnh báo ngừng sử dụng là một công cụ tốt để theo dõi các thay đổi trong API của bạn . Thư viện chuẩn Python cung cấp cho bạn các công cụ bạn cần để loại bỏ bất kỳ phần nào trong mã của bạn.

Chủ Đề