Я продолжаю получать следующее:
DeprecationWarning: integer argument expected, got float
Как мне удалить это сообщение? Есть ли способ избежать предупреждений в Python?
Я продолжаю получать следующее:
DeprecationWarning: integer argument expected, got float
Как мне удалить это сообщение? Есть ли способ избежать предупреждений в Python?
Из документации модуля warnings
:
#!/usr/bin/env python -W ignore::DeprecationWarning
Если вы находитесь в Windows: передайте -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, если ваш отличается.
Ни один из этих ответов не работал для меня, поэтому я опубликую свой способ, чтобы решить эту проблему. Я использую следующий скрипт at the beginning of my main.py
, и он отлично работает.
Используйте следующее как есть (скопируйте и вставьте его):
import "blabla"
import "blabla"
def warn(*args, **kwargs):
pass
import warnings
warnings.warn = warn
# more code here...
# more code here...
Передайте правильные аргументы?: P
В более серьезной заметке вы можете передать аргумент -Wi:: DeprecationWarning в командной строке интерпретатору, чтобы игнорировать предупреждения об отказе.
Преобразовать аргумент в int. Это так же просто, как
int(argument)
Если вы хотите игнорировать предупреждения только в функциях, вы можете сделать следующее.
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 в функцию, которую вы хотите игнорировать все предупреждения
ENV PYTHONWARNINGS="ignore::DeprecationWarning"
Если вы знаете, что делаете, другой способ - просто найти файл, который предупреждает вас (путь к файлу указан в информации о предупреждении), прокомментируйте строки, которые генерируют предупреждения.
Не избивать вас, но вас предупреждают, что то, что вы делаете, скорее всего, перестанет работать, когда вы будете обновлять python. Преобразуйте в int и сделайте с ним.
BTW. Вы также можете написать свой собственный обработчик предупреждений. Просто назначьте функцию, которая ничего не делает. Как перенаправить предупреждения python в пользовательский поток?