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

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

DeprecationWarning: integer argument expected, got float

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

9 ответов


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

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

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

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


у меня были такие:

/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()

теперь вы все равно получите все другие DeprecationWarnings, но не те, которые вызваны:

import md5, sha

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

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

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

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

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


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

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


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

int(argument)

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


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

import numpy as np
import . . . . . . . 

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

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


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

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


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

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