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.