Hướng dẫn ignore runtime warning python - bỏ qua cảnh báo thời gian chạy python

Tôi đang làm việc với mã ném rất nhiều (đối với tôi vào lúc này) cảnh báo vô dụng bằng thư viện

>>> import warnings
>>> def f():
...     print('before')
...     warnings.warn('you are warned!')
...     print('after')
...
>>> f()
before
:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
2. Đọc (/quét) Tài liệu tôi chỉ tìm thấy cách vô hiệu hóa cảnh báo cho các chức năng đơn lẻ. Nhưng tôi không muốn thay đổi quá nhiều mã.

Có một lá cờ như

>>> import warnings
>>> def f():
...     print('before')
...     warnings.warn('you are warned!')
...     print('after')
...
>>> f()
before
:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
3?

Bạn muốn giới thiệu gì?

Hướng dẫn ignore runtime warning python - bỏ qua cảnh báo thời gian chạy python

Đã hỏi ngày 22 tháng 1 năm 2013 lúc 16:26Jan 22, 2013 at 16:26Jan 22, 2013 at 16:26

4

Nhìn vào phần cảnh báo tạm thời của các tài liệu Python:

Nếu bạn đang sử dụng mã mà bạn biết sẽ đưa ra cảnh báo, chẳng hạn như hàm không dùng

import warnings

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

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

Tôi không tha thứ cho nó, nhưng bạn chỉ có thể đàn áp tất cả các cảnh báo với điều này:suppress all warnings with this:suppress all warnings with this:

import warnings
warnings.filterwarnings("ignore")

Ex:

>>> import warnings
>>> def f():
...     print('before')
...     warnings.warn('you are warned!')
...     print('after')
...
>>> f()
before
:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after

Đã trả lời ngày 22 tháng 1 năm 2013 lúc 16:31Jan 22, 2013 at 16:31Jan 22, 2013 at 16:31

MikemikeMikeMike

44.9K27 Huy hiệu vàng106 Huy hiệu bạc177 Huy hiệu đồng27 gold badges106 silver badges177 bronze badges27 gold badges106 silver badges177 bronze badges

7

Có tùy chọn

>>> import warnings
>>> def f():
...     print('before')
...     warnings.warn('you are warned!')
...     print('after')
...
>>> f()
before
:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
5.
python -W ignore foo.py

Đã trả lời ngày 22 tháng 1 năm 2013 lúc 16:28Jan 22, 2013 at 16:28Jan 22, 2013 at 16:28

Pavel Anossovpavel AnossovPavel AnossovPavel Anossov

58.8K14 Huy hiệu vàng146 Huy hiệu bạc123 Huy hiệu đồng14 gold badges146 silver badges123 bronze badges14 gold badges146 silver badges123 bronze badges

3

Bạn cũng có thể xác định một biến môi trường (tính năng mới trong năm 2010 - tức là Python 2.7)

export PYTHONWARNINGS="ignore"

Kiểm tra như thế này: Mặc định

$ export PYTHONWARNINGS="default"
$ python
>>> import warnings
>>> warnings.warn('my warning')
__main__:1: UserWarning: my warning
>>>

Bỏ qua cảnh báo

$ export PYTHONWARNINGS="ignore"
$ python
>>> import warnings
>>> warnings.warn('my warning')
>>> 

Đối với các cảnh báo không nhậndeprecation warnings have a look at how-to-ignore-deprecation-warnings-in-pythondeprecation warnings have a look at how-to-ignore-deprecation-warnings-in-python

Đã sao chép ở đây ...

Từ tài liệu của mô -đun

>>> import warnings
>>> def f():
...     print('before')
...     warnings.warn('you are warned!')
...     print('after')
...
>>> f()
before
:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
2:
>>> import warnings
>>> def f():
...     print('before')
...     warnings.warn('you are warned!')
...     print('after')
...
>>> f()
before
:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
1

Nếu bạn đang ở trên Windows: Pass

>>> import warnings
>>> def f():
...     print('before')
...     warnings.warn('you are warned!')
...     print('after')
...
>>> f()
before
:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
7 như một đối số cho Python. Mặc dù tốt hơn để giải quyết vấn đề, bằng cách đúc vào int.

(Lưu ý rằng trong Python 3.2, các cảnh báo từ chối bị bỏ qua theo mặc định.)

Or:

>>> import warnings
>>> def f():
...     print('before')
...     warnings.warn('you are warned!')
...     print('after')
...
>>> f()
before
:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
3

Bây giờ bạn vẫn nhận được tất cả các

>>> import warnings
>>> def f():
...     print('before')
...     warnings.warn('you are warned!')
...     print('after')
...
>>> f()
before
:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
8 khác, nhưng không phải là những người gây ra bởi:
>>> import warnings
>>> def f():
...     print('before')
...     warnings.warn('you are warned!')
...     print('after')
...
>>> f()
before
:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
5

Phượng Hoàng

6.4884 Huy hiệu vàng36 Huy hiệu bạc44 Huy hiệu đồng4 gold badges36 silver badges44 bronze badges4 gold badges36 silver badges44 bronze badges

Đã trả lời ngày 15 tháng 7 năm 2013 lúc 12:59Jul 15, 2013 at 12:59Jul 15, 2013 at 12:59

Billeholger BilleholgerHolger BilleHolger Bille

2.1631 Huy hiệu vàng15 Huy hiệu bạc20 Huy hiệu Đồng1 gold badge15 silver badges20 bronze badges1 gold badge15 silver badges20 bronze badges

4

Nếu bạn không muốn một cái gì đó phức tạp, thì:

import warnings
warnings.filterwarnings("ignore")
0

Gabriel L.

4.3384 Huy hiệu vàng25 Huy hiệu bạc34 Huy hiệu đồng4 gold badges25 silver badges34 bronze badges4 gold badges25 silver badges34 bronze badges

Đã trả lời ngày 13 tháng 12 năm 2018 lúc 14:07Dec 13, 2018 at 14:07Dec 13, 2018 at 14:07

Abhishek Jainabhishek JainAbhishek JainAbhishek Jain

3.2471 Huy hiệu vàng24 Huy hiệu bạc24 Huy hiệu đồng1 gold badge24 silver badges24 bronze badges1 gold badge24 silver badges24 bronze badges

1

Không làm cho nó phức tạp, chỉ cần sử dụng hai dòng này

import warnings
warnings.filterwarnings("ignore")
1

Đã trả lời ngày 16 tháng 6 năm 2021 lúc 20:36Jun 16, 2021 at 20:36Jun 16, 2021 at 20:36

Prajot Kuvalekarprajot KuvalekarPrajot KuvalekarPrajot Kuvalekar

3,8293 huy hiệu vàng14 Huy hiệu bạc26 Huy hiệu đồng3 gold badges14 silver badges26 bronze badges3 gold badges14 silver badges26 bronze badges

2

Đây là một câu hỏi cũ nhưng có một số hướng dẫn mới hơn trong PEP 565 để tắt tất cả các cảnh báo nếu bạn đang viết một ứng dụng Python bạn nên sử dụng:

import warnings
warnings.filterwarnings("ignore")
2

Lý do điều này được khuyến nghị là nó tắt tất cả các cảnh báo theo mặc định nhưng rất quan trọng cho phép chúng được bật lại thông qua

>>> import warnings
>>> def f():
...     print('before')
...     warnings.warn('you are warned!')
...     print('after')
...
>>> f()
before
:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
9 trên dòng lệnh hoặc
python -W ignore foo.py
0.

Đã trả lời ngày 6 tháng 2 năm 2018 lúc 18:48Feb 6, 2018 at 18:48Feb 6, 2018 at 18:48

Chris_RandsChris_RandsChris_RandsChris_Rands

36,5K12 Huy hiệu vàng79 Huy hiệu bạc110 Huy hiệu đồng12 gold badges79 silver badges110 bronze badges12 gold badges79 silver badges110 bronze badges

1

Khi tất cả những người khác thất bại, hãy sử dụng điều này: https://github.com/polvoazul/shutup

python -W ignore foo.py
1

Sau đó thêm vào đầu mã của bạn:

import warnings
warnings.filterwarnings("ignore")
3

Tuyên bố miễn trừ trách nhiệm: Tôi là chủ sở hữu của kho lưu trữ đó. Tôi đã viết nó sau lần thứ 5 tôi cần điều này và không thể tìm thấy bất cứ điều gì đơn giản chỉ hoạt động.

Đã trả lời ngày 29 tháng 6 năm 2021 lúc 20:13Jun 29, 2021 at 20:13Jun 29, 2021 at 20:13

Polvoazulpolvoazulpolvoazulpolvoazul

1.8581 Huy hiệu vàng17 Huy hiệu bạc25 Huy hiệu đồng1 gold badge17 silver badges25 bronze badges1 gold badge17 silver badges25 bronze badges

4

Nếu bạn biết những cảnh báo vô dụng mà bạn thường gặp phải, bạn có thể lọc chúng bằng tin nhắn.

import warnings
warnings.filterwarnings("ignore")
4

Đã trả lời ngày 15 tháng 5 năm 2019 lúc 6:25May 15, 2019 at 6:25May 15, 2019 at 6:25

user3226167user3226167user3226167user3226167

2.7812 huy hiệu vàng29 Huy hiệu bạc32 Huy hiệu đồng2 gold badges29 silver badges32 bronze badges2 gold badges29 silver badges32 bronze badges

import warnings
warnings.filterwarnings("ignore")
5

Thay đổi

python -W ignore foo.py
2 thành
python -W ignore foo.py
3 khi làm việc trên tệp hoặc thêm chức năng mới vào các cảnh báo kích hoạt lại.

Đã trả lời ngày 26 tháng 2 năm 2021 lúc 10:18Feb 26, 2021 at 10:18Feb 26, 2021 at 10:18

Tôi nhận ra điều này chỉ áp dụng cho một thị trường ngách của các tình huống, nhưng trong bối cảnh

python -W ignore foo.py
4, tôi thực sự thích sử dụng
python -W ignore foo.py
5:
import warnings
warnings.filterwarnings("ignore")
6
import warnings
warnings.filterwarnings("ignore")
7

Tuy nhiên, sử dụng

python -W ignore foo.py
5:
import warnings
warnings.filterwarnings("ignore")
8
import warnings
warnings.filterwarnings("ignore")
9

Phần tốt nhất là bạn chỉ có thể áp dụng điều này cho các dòng mã rất cụ thể.

Đã trả lời ngày 25 tháng 5 năm 2020 lúc 21:32May 25, 2020 at 21:32May 25, 2020 at 21:32

jorijnsmitjorijnsmitjorijnsmitjorijnsmit

4.9394 Huy hiệu vàng34 Huy hiệu bạc53 Huy hiệu Đồng4 gold badges34 silver badges53 bronze badges4 gold badges34 silver badges53 bronze badges


Nhiều cách Pythonic hơn để bỏ qua cảnh báoWARNINGSWARNINGS


Vì 'Cảnh báo.FilterWarnings ()' không triệt tiêu tất cả các cảnh báo, tôi sẽ đề nghị bạn sử dụng phương pháp sau:

>>> import warnings
>>> def f():
...     print('before')
...     warnings.warn('you are warned!')
...     print('after')
...
>>> f()
before
:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
0

OR,

Nếu bạn chỉ muốn đàn áp một bộ cảnh báo cụ thể, thì bạn có thể lọc như sau:

>>> import warnings
>>> def f():
...     print('before')
...     warnings.warn('you are warned!')
...     print('after')
...
>>> f()
before
:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
1

Đã trả lời ngày 13 tháng 1 năm 2021 lúc 15:54Jan 13, 2021 at 15:54Jan 13, 2021 at 15:54

SAFVAN CKSAFVAN CKSafvan CKSafvan CK

1.0258 Huy hiệu bạc18 Huy hiệu đồng8 silver badges18 bronze badges8 silver badges18 bronze badges

1

Cảnh báo là đầu ra thông qua stderr và giải pháp đơn giản là nối '2> /dev /null' vào CLI. Điều này rất có ý nghĩa đối với nhiều người dùng như những người có Centos 6 bị mắc kẹt với các phụ thuộc Python 2.6 (như YUM) và các mô -đun khác nhau đang được đẩy vào rìa của sự tuyệt chủng trong phạm vi bảo hiểm của họ.

Điều này đặc biệt đúng đối với mật mã liên quan đến Sni et cetera. Người ta có thể cập nhật 2.6 để xử lý HTTPS bằng cách sử dụng Proc AT: https://urllib3.readthedocs.io/en/latest/user-guide.html#ssl-py2

Cảnh báo vẫn còn đúng, nhưng mọi thứ bạn muốn đều được đặt lại. Việc định hướng lại của Stderr sẽ để lại cho bạn đầu ra thiết bị đầu cuối/vỏ sạch mặc dù bản thân nội dung stdout không thay đổi.

Trả lời FriendFX.Câu một (1) trả lời trực tiếp với vấn đề với một giải pháp phổ quát.Câu hai (2) có tính đến mỏ neo được trích dẫn 'vô hiệu hóa cảnh báo' là Python 2.6 cụ thể và ghi chú mà người dùng RHEL/CentOS 6 không thể trực tiếp làm mà không có 2.6.Mặc dù không có cảnh báo cụ thể nào được trích dẫn, para hai (2) trả lời câu hỏi 2.6 Tôi thường xuyên nhận được các đoạn ngắn trong mô-đun mật mã và làm thế nào người ta có thể "hiện đại hóa" (tức là, nâng cấp, backport, fix).đoạn ba (3) chỉ giải thích kết quả của việc sử dụng định hướng lại và nâng cấp mô-đun/phụ thuộc.

Đã trả lời ngày 23 tháng 1 năm 2017 lúc 2:43Jan 23, 2017 at 2:43Jan 23, 2017 at 2:43

1