Как игнорировать предупреждения об устаревании в Python

176

Я продолжаю получать это:

DeprecationWarning: integer argument expected, got float

Как сделать так, чтобы это сообщение исчезло? Есть ли способ избежать предупреждений в Python?

Мухаммед
источник

Ответы:

121

Из документации warningsмодуля :

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

Если вы в Windows: передайте -W ignore::DeprecationWarningв качестве аргумента Python. Хотя лучше решить проблему, приведя к int .

(Обратите внимание, что в Python 3.2 предупреждения об устаревании по умолчанию игнорируются.)

Stephan202
источник
8
Я хотел бы сделать эту работу ... Я получаю /usr/bin/env: python -W ignore::DeprecationWarning: No such file or directoryошибку. Это работает, если я запускаю python с -W ignore::DeprecationWarningпараметром в командной строке, но / usr / bin / env не справляется с этим.
Вероника
4
Кажется, решение только для Windows.
Даниэль Майлз
15
Вы можете установить переменную env PYTHONWARNINGS, это сработало для меня, export PYTHONWARNINGS="ignore::DeprecationWarning:simplejson"чтобы отключить предупреждения Django JSON об удалении из sorl
yvess
@yvess, если бы это был ответ, я бы за него проголосовал. Кажется, чистый способ игнорировать определенные предупреждения в масштабе всей системы. Я положил это в мой ~ / .profile. Прекрасно работает.
Allanberry
Привет, можем ли мы как-нибудь превратить это предупреждение об устаревании в сообщение типа информации. То, что я хотел бы, это просто отобразить сообщение на консоли, чтобы его не относили к категории каких-либо предупреждений.
Кришна Оза
194

Вы должны просто исправить свой код, но на всякий случай,

import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning) 
исмаил
источник
2
Работал для меня, используя iPython
zbinsd
21
Это не работает для меня вообще, все еще видя устаревшие предупреждения.
user1244215
8
@ user1244215 Я могу ошибаться, но я думаю, что имеет значение, где в вашем коде вы запускаете warnings.filterwarnings("ignore", category=DeprecationWarning). Я думаю, что вы должны запустить это после импорта библиотеки, которая выплевывает предупреждения, хотя я могу ошибаться.
Джек Келли
1
Категория @CodingYourLife необходима, поэтому вы все равно увидите предупреждения других типов, такие как RuntimeWarning и т. Д.
ismail
1
В моем случае код, который вызывал предупреждение, был from xgboost import XGBClassifier. Я должен был поставить warnings.filterwarnings("ignore", category=DeprecationWarning)непосредственно перед этим импорт, чтобы он работал.
Седл
193

У меня было это:

/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

Исправлено с помощью:

import warnings

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

yourcode()

Теперь вы все еще получаете все остальные DeprecationWarning, но не те, которые вызваны:

import md5, sha
Эдди Пронк
источник
2
Круто, спасибо большое !! (Мне потребовалось время, чтобы осознать, что я могу также обернуть в него не импортируемые биты кода, поскольку некоторые пакеты также генерировали DeprecationWarnings при использовании после импорта.) Очень хороший способ отключить только определенные предупреждения DeprecationWarnings, которые я уже рассмотрел и решил Я хочу игнорировать.
Вероника
29

Я нашел самый чистый способ сделать это (особенно в Windows), добавив следующее в C: \ Python26 \ Lib \ site-packages \ sitecustomize.py:

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

Обратите внимание, что мне пришлось создать этот файл. Конечно, измените путь к python, если у вас другой.

Тристан Хавелик
источник
26

Ни один из этих ответов не сработал для меня, поэтому я опубликую свой способ решить эту проблему. Я использую следующий at the beginning of my main.pyскрипт, и он отлично работает.


Используйте следующее как есть (скопируйте и вставьте его):

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

Пример:

import "blabla"
import "blabla"

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

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

seralouk
источник
4
Это работало, когда все другие решения не работали. Спасибо!
CXXL
Это спасло меня тоже. Рад, что смог помочь.
seralouk
Не работает в 3.7.3 для предупреждений об устаревании AstroPy. :(
здесь
Работал на меня, спасибо :)
valkyrie55
отличные новости ! ура
seralouk
6

Передать правильные аргументы? :П

Что касается более серьезного замечания, вы можете передать аргумент -Wi :: DeprecationWarning в командной строке интерпретатору, чтобы игнорировать предупреждения об устаревании.

shylent
источник
5

Решение Docker

  • Отключите ВСЕ предупреждения перед запуском приложения python
    • Вы также можете отключить ваши докеризированные тесты
ENV PYTHONWARNINGS="ignore::DeprecationWarning"
Марчелло де Сэйлс
источник
4

Преобразуйте аргумент в int. Это так просто, как

int(argument)
Гонсало Кверо
источник
4

Если вы хотите игнорировать предупреждения только в функциях, вы можете сделать следующее.

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

Просто добавьте декоратор @ignore_warnings в функцию, которую вы хотите игнорировать все предупреждения

Тридип Рат
источник
3

Попробуйте приведенный ниже код, если вы используете Python3:

import sys

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

или попробуйте это ...

import warnings

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

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

или попробуйте это ...

import warnings
warnings.filterwarnings("ignore")
Амар Кумар
источник
2

Python 3

Просто напишите ниже строки, которые легко запомнить, прежде чем писать код:

import warnings

warnings.filterwarnings("ignore")
Дипен Гаджар
источник
0

Если вы знаете, что делаете, другой способ - просто найти файл, который предупреждает вас (путь к файлу указан в информации о предупреждении), прокомментируйте строки, которые генерируют предупреждения.

Statham
источник
0

Для python 3 просто напишите ниже коды, чтобы игнорировать все предупреждения.

from warnings import filterwarnings
filterwarnings("ignore")
Ашиш Ананд
источник
-2

Не хочу вас расстраивать, но вас предупреждают, что то, что вы делаете, скорее всего перестанет работать при следующем обновлении python. Преобразовать в int и покончить с этим.

КСТАТИ. Вы также можете написать свой собственный обработчик предупреждений. Просто назначьте функцию, которая ничего не делает. Как перенаправить предупреждения Python в пользовательский поток?

косяк
источник
4
Этот совет работает, только если это действительно его собственный код, а не из какого-либо стороннего пакета.
Кристофер Барбер