Как игнорировать предупреждения об устаревании в Python
Я продолжаю получать это:
DeprecationWarning: integer argument expected, got float
Как сделать так, чтобы это сообщение исчезло? Есть ли способ избежать предупреждений в Python?
17 ответов
Из документации warnings
модуль:
#!/usr/bin/env python -W ignore::DeprecationWarning
Если вы на Windows: pass -W ignore::DeprecationWarning
в качестве аргумента для Python. Хотя лучше решить проблему, приведя к int.
(Обратите внимание, что в Python 3.2 предупреждения об устаревании по умолчанию игнорируются.)
Вы должны просто исправить свой код, но на всякий случай,
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
У меня были такие:
/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
Ни один из этих ответов не сработал для меня, поэтому я опубликую свой способ решить эту проблему. Я использую следующее 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...
Я нашел самый чистый способ сделать это (особенно в Windows), добавив следующее в C:\Python26\Lib\site-packages\sitecustomize.py:
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
Обратите внимание, что мне пришлось создать этот файл. Конечно, измените путь к Python, если у вас другой.
Docker Solution
- Отключите ВСЕ предупреждения перед запуском приложения python
- Вы также можете отключить ваши докеризированные тесты
ENV PYTHONWARNINGS="ignore::DeprecationWarning"
Если вы хотите игнорировать предупреждения только в функциях, вы можете сделать следующее.
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 в функцию, которую вы хотите игнорировать все предупреждения
Если вы используете ведение журнала (https://docs.python.org/3/library/logging.html) для форматирования или перенаправления сообщений ERROR, NOTICE и DEBUG, вы можете перенаправить ПРЕДУПРЕЖДЕНИЯ из системы предупреждений в систему ведения журнала.:
logging.captureWarnings(True)
См. https://docs.python.org/3/library/warnings.html и https://docs.python.org/3/library/logging.html#logging.captureWarnings.
В моем случае я форматировал все исключения с помощью системы ведения журнала, но предупреждения (например, scikit-learn) не были затронуты.
Python 3
Просто напишите ниже строки, которые легко запомнить перед написанием кода:
import warnings
warnings.filterwarnings("ignore")
Передать правильные аргументы?:П
На более серьезном замечании вы можете передать интерпретатору аргумент -Wi::DeprecationWarning в командной строке, чтобы игнорировать предупреждения об устаревании.
Преобразуйте аргумент в int. Это так же просто, как
int(argument)
Для python 3 просто напишите ниже коды, чтобы игнорировать все предупреждения.
from warnings import filterwarnings
filterwarnings("ignore")
Попробуйте следующий код, если вы используете 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")
Не хочу вас расстраивать, но вас предупреждают, что то, что вы делаете, скорее всего перестанет работать при следующем обновлении python. Преобразовать в int и покончить с этим.
КСТАТИ. Вы также можете написать свой собственный обработчик предупреждений. Просто назначьте функцию, которая ничего не делает. Как перенаправить предупреждения Python в пользовательский поток?
Если вы знаете, что делаете, другой способ - просто найти файл, который предупреждает вас (путь к файлу указан в информации о предупреждении), прокомментируйте строки, которые генерируют предупреждения.
Закомментируйте строки предупреждений в файле ниже.
lib64/python2.7/ сайты-пакеты / криптография /инициализация.py
Немного грубовато, но у меня сработало после того, как вышеуказанные методы не сработали.
./myscrypt.py 2>/dev/null