Jak zignorować ostrzeżenia o wycofaniu w Pythonie


176

Ciągle to rozumiem:

DeprecationWarning: integer argument expected, got float

Jak usunąć tę wiadomość? Czy istnieje sposób na uniknięcie ostrzeżeń w Pythonie?

Odpowiedzi:


121

Z dokumentacji warningsmodułu :

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

Jeśli używasz systemu Windows: przekaż -W ignore::DeprecationWarningjako argument do Pythona. Lepiej jednak rozwiązać problem, przesyłając rzutowanie do int .

(Zauważ, że w Pythonie 3.2 ostrzeżenia o wycofaniu są domyślnie ignorowane).


8
Chciałbym, żeby to zadziałało ... Pojawia się /usr/bin/env: python -W ignore::DeprecationWarning: No such file or directorybłąd. Działa, jeśli uruchomię Pythona z -W ignore::DeprecationWarningopcją w wierszu poleceń, ale / usr / bin / env nie radzi sobie z tym.
— weronika

4
Wydaje się, że jest to rozwiązanie tylko dla systemu Windows.
— Daniel Miles

15
Możesz ustawić zmienną env PYTHONWARNINGS, która zadziałała dla mnie, export PYTHONWARNINGS="ignore::DeprecationWarning:simplejson"aby wyłączyć ostrzeżenia o pozbawieniu django json z sorl
— yvess

@yvess, gdyby to była odpowiedź, zagłosowałbym na nią. Wydaje się czystym sposobem ignorowania określonych ostrzeżeń w całym systemie. Umieściłem to w moim ~ / .profile. Działa świetnie.
— alanberry

Cześć, czy możemy dowiedzieć się, jak zmienić ten komunikat ostrzegawczy o wycofaniu w komunikat o typie informacji. Chciałbym po prostu wyświetlić komunikat na konsoli, aby nie był klasyfikowany jako żaden rodzaj ostrzeżenia.
— Krishna Oza,

194

Należy po prostu naprawić kod, ale na wszelki wypadek

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

2
Pracowałem dla mnie przy użyciu iPythona
— zbinsd

21
To w ogóle nie działa w moim przypadku, wciąż widzę ostrzeżenia o wycofaniu.
— user1244215

8
@ user1244215 Mogę się mylić, ale myślę, że ma znaczenie, gdzie w kodzie uruchomisz warnings.filterwarnings("ignore", category=DeprecationWarning). Myślę, że musisz to uruchomić po zaimportowaniu biblioteki, która wypluwa ostrzeżenia, chociaż mogę się mylić.
— Jack Kelly,

1
Potrzebna jest @CodingYourLife kategoria więc będzie jeszcze zobaczyć inne rodzaje ostrzeżeń jak RuntimeWarning itp
— Ismail

1
W moim przypadku kod powodujący ostrzeżenie to from xgboost import XGBClassifier. Musiałem wstawić warnings.filterwarnings("ignore", category=DeprecationWarning)bezpośrednio przed tym importem, aby zadziałał.
— sedeh

193

Miałem te:

/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

Naprawiono to za pomocą:

import warnings

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

yourcode()

Teraz nadal otrzymujesz wszystkie inne DeprecationWarning, ale nie te spowodowane przez:

import md5, sha

2
Super, dziękuję bardzo !! (Zajęło mi chwilę, zanim zdałem sobie sprawę, że mogę również zawijać w tym nieimportowane fragmenty kodu, ponieważ niektóre pakiety generowały również ostrzeżenia o deprecacji, gdy były używane po imporcie.) Bardzo fajny sposób na wyciszenie tylko określonych ostrzeżeń o wycofaniu, które już sprawdziłem i zdecydowałem Chcę zignorować.
— weronika

29

Znalazłem najczystszy sposób, aby to zrobić (szczególnie w systemie Windows), dodając następujący fragment do C: \ Python26 \ Lib \ site-packages \ sitecustomize.py:

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

Zwróć uwagę, że musiałem utworzyć ten plik. Oczywiście zmień ścieżkę do Pythona, jeśli twoja jest inna.


26

Żadna z tych odpowiedzi nie zadziałała dla mnie, więc opublikuję sposób, aby rozwiązać ten problem. Używam następującego at the beginning of my main.pyskryptu i działa dobrze.


Użyj tego, co jest (skopiuj i wklej):

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

Przykład:

import "blabla"
import "blabla"

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

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


4
To działało, gdy nie wszystkie inne rozwiązania. Dzięki!
— cxxl

To też mnie uratowało. Cieszę się, że mogłem pomóc.
— seralouk

Nie działa w wersji 3.7.3 dla ostrzeżeń o wycofaniu AstroPy. :(
— ingyhere

Pracował dla mnie, dzięki :)
— valkyrie55

Dobre wieści ! okrzyki
— seralouk

6

Podać prawidłowe argumenty? : P

Mówiąc bardziej poważnie, możesz przekazać argument -Wi :: DeprecationWarning w wierszu poleceń do interpretera, aby zignorować ostrzeżenia o wycofaniu.


5

Rozwiązanie Docker

  • Wyłącz WSZYSTKIE ostrzeżenia przed uruchomieniem aplikacji w języku Python
    • Możesz również wyłączyć zadokowane testy
ENV PYTHONWARNINGS="ignore::DeprecationWarning"


4

Jeśli chcesz zignorować ostrzeżenia tylko w funkcjach, możesz wykonać następujące czynności.

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
    ...

Po prostu dodaj dekorator @ignore_warnings do funkcji, dla której chcesz zignorować wszystkie ostrzeżenia


3

Wypróbuj poniższy kod, jeśli używasz Python3:

import sys

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

lub spróbuj tego ...

import warnings

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

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

lub spróbuj tego ...

import warnings
warnings.filterwarnings("ignore")

2

Python 3

Po prostu napisz poniższe wiersze, które są łatwe do zapamiętania przed napisaniem kodu:

import warnings

warnings.filterwarnings("ignore")

0

Jeśli wiesz, co robisz, innym sposobem jest po prostu znalezienie pliku, który Cię ostrzega (ścieżka do pliku jest pokazana w informacjach ostrzegawczych), skomentuj wiersze, które generują ostrzeżenia.


0

W przypadku Pythona 3 po prostu napisz poniższe kody, aby zignorować wszystkie ostrzeżenia.

from warnings import filterwarnings
filterwarnings("ignore")

-2

Nie żeby cię tym pobić, ale ostrzega cię, że to, co robisz, prawdopodobnie przestanie działać przy następnej aktualizacji Pythona. Konwertuj na int i skończ z tym.

BTW. Możesz także napisać własny moduł obsługi ostrzeżeń. Po prostu przypisz funkcję, która nic nie robi. Jak przekierować ostrzeżenia Pythona do niestandardowego strumienia?


4
Ta rada działa tylko wtedy, gdy jest to rzeczywiście jego własny kod, a nie pakiet innej firmy.
— Christopher Barber
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.