Como ignorar avisos de descontinuação em Python

176

Eu continuo recebendo isso:

DeprecationWarning: integer argument expected, got float

Como faço para que esta mensagem desapareça? Existe uma maneira de evitar avisos no Python?

Mohammed
fonte

Respostas:

121

Da documentação do warningsmódulo :

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

Se você estiver no Windows: passe -W ignore::DeprecationWarningcomo argumento para o Python. Melhor ainda resolver o problema, transmitindo para int .

(Observe que no Python 3.2, os avisos de descontinuação são ignorados por padrão.)

Stephan202
fonte
8
Eu gostaria de poder fazer isso funcionar ... Eu recebo um /usr/bin/env: python -W ignore::DeprecationWarning: No such file or directoryerro. Funciona se eu executar o python com a -W ignore::DeprecationWarningopção na linha de comando, mas / usr / bin / env não lida com isso.
weronika
4
Parece ser uma solução apenas para Windows.
Daniel Miles
15
Você pode definir as PYTHONWARNINGS variáveis env Isso funcionou para mim export PYTHONWARNINGS="ignore::DeprecationWarning:simplejson"Para desativar django json deprication avisos de SORL
yvess
@ yvess, se isso fosse uma resposta, eu teria votado a favor. Parece uma maneira limpa de ignorar avisos específicos em todo o sistema. Coloquei no meu perfil ~ /. Funciona bem.
allanberry
Olá, podemos de alguma forma transformar essa mensagem de Aviso de reprovação em uma mensagem do tipo informações. O que eu gostaria é apenas exibir a mensagem no console para não ser categorizada como qualquer tipo de aviso.
Krishna Oza
194

Você deve apenas corrigir seu código, mas por precaução,

import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning) 
ismail
fonte
2
Trabalhou para mim usando o iPython
zbinsd
21
Isso não funciona para mim, ainda vendo avisos de depreciação.
user1244215
8
@ user1244215 Posso estar errado, mas acho que importa onde você executa o seu código warnings.filterwarnings("ignore", category=DeprecationWarning). Acho que você deve executar isso depois de importar a biblioteca que está emitindo os avisos, embora eu possa estar enganado.
Jack Kelly
1
A categoria @CodingYourLife é necessária para que você ainda veja outros tipos de avisos como o RuntimeWarning etc.
ismail
1
No meu caso, o código que estava causando o aviso era from xgboost import XGBClassifier. Eu tive que colocar warnings.filterwarnings("ignore", category=DeprecationWarning)imediatamente antes dessa importação para que funcionasse.
Sedeh
193

Eu tive estes:

/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

Corrigido com:

import warnings

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

yourcode()

Agora você ainda recebe todos os outros DeprecationWarnings, mas não os causados ​​por:

import md5, sha
Eddy Pronk
fonte
2
Impressionante, muito obrigado!! (Levei um momento para perceber que eu também poderia envolver bits de código não importados nisso, pois alguns pacotes também estavam gerando DeprecationWarnings quando usados ​​após a importação.) Maneira muito boa de silenciar apenas DeprecationWarnings específicos que eu já examinei e decidi Eu quero ignorar.
weronika
29

Eu achei a maneira mais limpa de fazer isso (especialmente no Windows), adicionando o seguinte a C: \ Python26 \ Lib \ site-packages \ sitecustomize.py:

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

Note que eu tive que criar este arquivo. Obviamente, mude o caminho para python se o seu for diferente.

Tristan Havelick
fonte
26

Nenhuma dessas respostas funcionou para mim, então postarei meu caminho para resolver isso. Eu uso o seguinte at the beginning of my main.pyscript e funciona bem.


Use o seguinte como está (copie e cole):

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

Exemplo:

import "blabla"
import "blabla"

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

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

seralouk
fonte
4
Isso funcionou quando todas as outras soluções não. Obrigado!
Cxxl
Isso também me salvou. Ainda bem que pude ajudar.
seralouk 30/05
Não funciona no 3.7.3 para avisos de descontinuação do AstroPy. :(
ingyhere 14/08/19
Trabalhou para mim, obrigado :)
valkyrie55
boas notícias ! Cheers
seralouk
6

Passar os argumentos corretos? : P

Na observação mais séria, você pode passar o argumento -Wi :: DeprecationWarning na linha de comandos para o intérprete para ignorar os avisos de descontinuação.

shylent
fonte
5

Solução Docker

  • Desative TODOS os avisos antes de executar o aplicativo python
    • Você também pode desativar seus testes dockerized
ENV PYTHONWARNINGS="ignore::DeprecationWarning"
Marcello de Sales
fonte
4

Converta o argumento para int. É tão simples quanto

int(argument)
Gonzalo Quero
fonte
4

Quando você deseja ignorar avisos apenas em funções, você pode fazer o seguinte.

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

Basta adicionar o decorador @ignore_warnings na função que você deseja ignorar todos os avisos

Trideep Rath
fonte
3

Experimente o código abaixo se você estiver usando o Python3:

import sys

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

ou tente isso ...

import warnings

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

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

ou tente isso ...

import warnings
warnings.filterwarnings("ignore")
Amar Kumar
fonte
2

Python 3

Basta escrever abaixo das linhas fáceis de lembrar antes de escrever seu código:

import warnings

warnings.filterwarnings("ignore")
Dipen Gajjar
fonte
0

Se você sabe o que está fazendo, outra maneira é simplesmente encontrar o arquivo que avisa (o caminho do arquivo é mostrado em informações de aviso) e comentar as linhas que geram os avisos.

Statham
fonte
0

Para python 3, basta escrever os códigos abaixo para ignorar todos os avisos.

from warnings import filterwarnings
filterwarnings("ignore")
Ashish Anand
fonte
-2

Para não te incomodar com isso, mas você está sendo avisado de que o que você está fazendo provavelmente parará de funcionar na próxima atualização do python. Converta em int e termine com isso.

Entre. Você também pode escrever seu próprio manipulador de avisos. Apenas atribua uma função que não faz nada. Como redirecionar avisos de python para um fluxo personalizado?

SpliFF
fonte
4
Esse conselho só funciona se for realmente seu próprio código e não de algum pacote de terceiros.
Christopher Barber