Cách bỏ qua các cảnh báo không dùng nữa trong Python


176

Tôi tiếp tục nhận được điều này:

DeprecationWarning: integer argument expected, got float

Làm thế nào để tôi thực hiện tin nhắn này đi? Có cách nào để tránh cảnh báo trong Python không?

Câu trả lời:


121

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

 #!/usr/bin/env python -W ignore::DeprecationWarning

Nếu bạn đang ở trên Windows: chuyển -W ignore::DeprecationWarninglàm đối số cho Python. Mặc dù tốt hơn để giải quyết vấn đề, bằng cách chuyển sang int .

(Lưu ý rằng trong Python 3.2, các cảnh báo không dùng nữa được bỏ qua theo mặc định.)


8
Tôi ước tôi có thể làm cho công việc này ... tôi gặp /usr/bin/env: python -W ignore::DeprecationWarning: No such file or directorylỗi. Nó hoạt động nếu tôi chạy python với -W ignore::DeprecationWarningtùy chọn trên dòng lệnh, nhưng / usr / bin / env không xử lý được.
weronika

4
Có vẻ là một giải pháp chỉ dành cho cửa sổ.
Daniel Miles

15
Bạn có thể đặt biến env PYTHONWARNING, điều này có hiệu quả với tôi export PYTHONWARNINGS="ignore::DeprecationWarning:simplejson"để vô hiệu hóa cảnh báo mô tả django json từ sorl
yvess

@yvess, nếu đây là một câu trả lời, tôi đã bình chọn cho nó. Có vẻ là một cách sạch sẽ để bỏ qua các cảnh báo cụ thể trên toàn hệ thống. Tôi đặt nó trong ~ / .profile của tôi. Công trình tuyệt vời.
allanberry

Xin chào, chúng tôi có thể chuyển một số thông báo Cảnh báo Khấu hao thành thông báo loại thông tin. Những gì tôi muốn chỉ là hiển thị thông báo trên bàn điều khiển không được phân loại thành bất kỳ loại cảnh báo nào.
Krishna Oza

194

Bạn chỉ nên sửa mã của mình nhưng chỉ trong trường hợp,

import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning) 

2
Làm việc cho tôi bằng iPython
zbinsd

21
Điều này hoàn toàn không phù hợp với tôi, vẫn còn thấy sự phản đối.
dùng1244215

8
@ user1244215 Tôi có thể sai nhưng tôi nghĩ vấn đề là bạn chạy mã ở đâu warnings.filterwarnings("ignore", category=DeprecationWarning). Tôi nghĩ rằng bạn phải chạy nó sau khi bạn nhập thư viện phát ra các cảnh báo, mặc dù tôi có thể bị nhầm lẫn.
Jack Kelly

1
Danh mục @CodingYourLife là cần thiết vì vậy bạn vẫn sẽ thấy các loại cảnh báo khác như RuntimeWarning, v.v.
ismail

1
Trong trường hợp của tôi, mã gây ra cảnh báo là from xgboost import XGBClassifier. Tôi đã phải đặt warnings.filterwarnings("ignore", category=DeprecationWarning)ngay trước khi nhập khẩu để nó hoạt động.
sedeh

193

Tôi đã có những điều này:

/home/eddyp/virtualenv/lib/python2.6/site-packages/Twisted-8.2.0-py2.6-linux-x86_64.egg/twisted/persisted/sob.py:12:
DeprecationWarning: the md5 module is deprecated; use hashlib instead import os, md5, sys

/home/eddyp/virtualenv/lib/python2.6/site-packages/Twisted-8.2.0-py2.6-linux-x86_64.egg/twisted/python/filepath.py:12:
DeprecationWarning: the sha module is deprecated; use the hashlib module instead import sha

Đã sửa nó bằng:

import warnings

with warnings.catch_warnings():
    warnings.filterwarnings("ignore",category=DeprecationWarning)
    import md5, sha

yourcode()

Bây giờ bạn vẫn nhận được tất cả các DeprecationWarnings khác , nhưng không phải là những nguyên nhân gây ra bởi:

import md5, sha

2
Tuyệt vời, cảm ơn bạn rất nhiều!! (Mất một lúc để tôi nhận ra tôi cũng có thể bọc các bit mã không nhập trong này, vì một số gói cũng đang tạo DeprecationWarnings khi được sử dụng sau khi nhập.) Cách rất hay để chỉ im lặng DeprecationWarnings cụ thể mà tôi đã xem và quyết định Tôi muốn bỏ qua.
weronika

29

Tôi đã tìm thấy cách sạch nhất để làm điều này (đặc biệt là trên các cửa sổ) là thêm các mục sau vào C: \ Python26 \ Lib \ site-gói \ sitecustomize.py:

import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)

Lưu ý rằng tôi phải tạo tập tin này. Tất nhiên, thay đổi đường dẫn đến python nếu bạn khác.


26

Không có câu trả lời nào trong số này làm việc cho tôi vì vậy tôi sẽ đăng cách của mình để giải quyết vấn đề này. Tôi sử dụng đoạn at the beginning of my main.pyscript sau và nó hoạt động tốt.


Sử dụng như sau (sao chép-dán nó):

def warn(*args, **kwargs):
    pass
import warnings
warnings.warn = warn

Thí dụ:

import "blabla"
import "blabla"

def warn(*args, **kwargs):
    pass
import warnings
warnings.warn = warn

# more code here...
# more code here...


4
Điều đó đã làm việc khi tất cả các giải pháp khác không. Cảm ơn!
cxxl

Điều này cũng cứu tôi. Vui vì tôi có thể giúp.
seralouk

Không hoạt động trong 3.7.3 cho các cảnh báo khấu hao AstroPy. :(
ingyhere

Làm việc cho tôi, cảm ơn :)
valkyrie55

tin tốt ! chúc mừng
seralouk

6

Vượt qua những lý lẽ đúng? : P

Trong lưu ý nghiêm trọng hơn, bạn có thể chuyển đối số -Wi :: DeprecationWarning trên dòng lệnh cho trình thông dịch để bỏ qua các cảnh báo khấu hao.


5

Giải pháp Docker

  • Vô hiệu hóa TẤT CẢ các cảnh báo trước khi chạy ứng dụng python
    • Bạn cũng có thể vô hiệu hóa các bài kiểm tra dockerized của mình
ENV PYTHONWARNINGS="ignore::DeprecationWarning"

4

Chuyển đổi đối số thành int. Nó đơn giản như

int(argument)

4

Khi bạn muốn bỏ qua các cảnh báo chỉ trong các chức năng, bạn có thể làm như sau.

import warnings
from functools import wraps


def ignore_warnings(f):
    @wraps(f)
    def inner(*args, **kwargs):
        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter("ignore")
            response = f(*args, **kwargs)
        return response
    return inner

@ignore_warnings
def foo(arg1, arg2):
    ...
    write your code here without warnings
    ...

@ignore_warnings
def foo2(arg1, arg2, arg3):
    ...
    write your code here without warnings
    ...

Chỉ cần thêm trình trang trí @ignore_warnings vào chức năng bạn muốn bỏ qua tất cả các cảnh báo


3

Hãy thử mã dưới đây nếu bạn đang sử dụng Python3:

import sys

if not sys.warnoptions:
    import warnings
    warnings.simplefilter("ignore")

hoặc thử điều này ...

import warnings

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

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

hoặc thử điều này ...

import warnings
warnings.filterwarnings("ignore")

2

Con trăn 3

Chỉ cần viết các dòng dưới đây dễ nhớ trước khi viết mã của bạn:

import warnings

warnings.filterwarnings("ignore")

0

Nếu bạn biết những gì bạn đang làm, một cách khác chỉ đơn giản là tìm tệp cảnh báo bạn (đường dẫn của tệp được hiển thị trong thông tin cảnh báo), nhận xét các dòng tạo cảnh báo.


0

Đối với python 3, chỉ cần viết mã dưới đây để bỏ qua tất cả các cảnh báo.

from warnings import filterwarnings
filterwarnings("ignore")

-2

Không đánh bại bạn về điều đó nhưng bạn đang được cảnh báo rằng những gì bạn đang làm có thể sẽ ngừng hoạt động khi bạn nâng cấp python tiếp theo. Chuyển đổi sang int và được thực hiện với nó.

BTW. Bạn cũng có thể viết trình xử lý cảnh báo của riêng bạn. Chỉ cần gán một chức năng mà không làm gì. Làm cách nào để chuyển hướng cảnh báo python sang luồng tùy chỉnh?


4
Lời khuyên đó chỉ hoạt động nếu đó thực sự là mã riêng của anh ấy chứ không phải từ gói bên thứ 3 nào đó.
Christopher Barber
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.