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?

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


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) 

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

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.


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


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.


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"


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


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

2

Python 3

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

import warnings

warnings.filterwarnings("ignore")

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.


0

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

from warnings import filterwarnings
filterwarnings("ignore")

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


4
Esse conselho só funciona se for realmente seu próprio código e não de algum pacote de terceiros.
Christopher Barber
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.