Как игнорировать предупреждения в 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()
теперь вы все равно получите все другие DeprecationWarning
s, но не те, которые вызваны:
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 в командной строке интерпретатору, чтобы игнорировать предупреждения об устаревании.
ни один из упомянутых ответов не работал для меня, поэтому я опубликую свой способ решить эту проблему. Я использую следующее 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 в функцию, которую вы хотите игнорировать все предупреждения