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?

Mohammed
źródło

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

Stephan202
źródło
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) 
ismail
źródło
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
Eddy Pronk
źródło
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.

Tristan Havelick
źródło
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...

seralouk
źródło
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.

shylent
źródło
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"
Marcello de Sales
źródło
4

Zamień argument na int. To jest tak proste, jak

int(argument)
Gonzalo Quero
źródło
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

Trideep Rath
źródło
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")
Amar Kumar
źródło
2

Python 3

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

import warnings

warnings.filterwarnings("ignore")
Dipen Gajjar
źródło
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.

Statham
źródło
0

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

from warnings import filterwarnings
filterwarnings("ignore")
Ashish Anand
źródło
-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?

SpliFF
źródło
4
Ta rada działa tylko wtedy, gdy jest to rzeczywiście jego własny kod, a nie pakiet innej firmy.
Christopher Barber