Как игнорировать предупреждения об устаревании в Python - PullRequest
139 голосов
/ 18 мая 2009

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

DeprecationWarning: integer argument expected, got float

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

Ответы [ 10 ]

174 голосов
/ 29 октября 2009

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

/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
165 голосов
/ 18 мая 2009

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

import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning) 
102 голосов
/ 18 мая 2009

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

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

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

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

26 голосов
/ 04 марта 2010

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

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

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

16 голосов
/ 25 мая 2018

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


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

import ....
import ....

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

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

6 голосов
/ 18 мая 2009

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

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

5 голосов
/ 18 мая 2009

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

int(argument)
3 голосов
/ 05 декабря 2017

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

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 в функцию, в которой вы хотите игнорировать все предупреждения

1 голос
/ 18 мая 2009

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

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

0 голосов
/ 02 мая 2019

Решение Docker

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