Як ігнорувати попередження про депресію в Python


176

Я продовжую отримувати це:

DeprecationWarning: integer argument expected, got float

Як змусити це повідомлення піти? Чи є спосіб уникнути попереджень у Python?

Відповіді:


121

З документації warningsмодуля :

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

Якщо ви працюєте в Windows: передайте -W ignore::DeprecationWarningяк аргумент Python. Хоча краще вирішити проблему, відправивши в Int .

(Зверніть увагу, що в Python 3.2 попередження про аномацію за замовчуванням ігнорується.)


8
Я б хотів, щоб я міг зробити цю роботу ... я отримую /usr/bin/env: python -W ignore::DeprecationWarning: No such file or directoryпомилку. Він працює, якщо я запускаю python з -W ignore::DeprecationWarningопцією в командному рядку, але / usr / bin / env не займається цим.
weronika

4
Здається, це рішення лише для вікон.
Даніель Майлз

15
Ви можете встановити змінну env PYTHWARNINGS. Це працювало для мене, export PYTHONWARNINGS="ignore::DeprecationWarning:simplejson"щоб відключити попередження про зображення django json від sorl
yvess

@yvess, якби це відповідь, я би проголосував за це. Здається, чистий спосіб ігнорувати конкретні попередження у всій країні. Я помістив його у свій ~ / .profile. Чудово працює.
чорниця

Привіт, можемо ми дещо перетворити це Попередження про депресацію на повідомлення типу інформації. Що я хотів би - це просто відобразити повідомлення на консолі, яке не можна класифікувати як будь-який тип попередження.
Кришна Оза

194

Вам слід просто виправити код, але про всяк випадок,

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

2
Працював для мене за допомогою iPython
zbinsd

21
Це для мене взагалі не працює, все ще спостерігаючи попередження про депрекацію.
користувач1244215

8
@ user1244215 Я можу помилитися, але я думаю, це має значення, де у вашому коді ви працюєте warnings.filterwarnings("ignore", category=DeprecationWarning). Я думаю, що вам доведеться це запустити після того, як ви імпортуєте бібліотеку, яка розплітає попередження, хоча я можу помилитися.
Джек Келлі

1
Категорія @CodingYourLife потрібна, тому ви все одно побачите інші типи попереджень, як RuntimeWarning тощо
ismail

1
У моєму випадку код, який викликав попередження, був from xgboost import XGBClassifier. Мені довелося поставити warnings.filterwarnings("ignore", category=DeprecationWarning)безпосередньо перед тим імпорт, щоб він працював.
sedeh

193

У мене були такі:

/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

2
Дивовижне, велике спасибі !! (Знадобився момент, щоб зрозуміти, що я можу також вписати неімпортні біти коду в цьому, оскільки деякі пакунки також генерують DeprecationWarnings при використанні після імпорту.) Дуже приємний спосіб замовкнути певні DeprecationWarnings, які я вже переглянув і вирішив Я хочу проігнорувати.
weronika

29

Я знайшов найчистіший спосіб зробити це (особливо у Windows), додавши до C: \ Python26 \ Lib \ site-пакети \ sitecustomize.py:

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

Зауважте, що мені довелося створити цей файл. Звичайно, змінити шлях до python, якщо твій інший.


26

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


Використовуйте таке, як є (скопіюйте та вставте):

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

Приклад:

import "blabla"
import "blabla"

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

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


4
Це спрацювало тоді, коли всі інші рішення цього не зробили. Дякую!
cxxl

Це і мене врятувало. Радий, що можу допомогти.
seralouk

Не працює в 3.7.3 для попереджень про деструкцію AstroPy. :(
ingyhere

Працювали для мене, дякую :)
valkyrie55

відмінна новина ! ура
seralouk

6

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

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


5

Докерське рішення

  • Вимкніть ВСІ попередження перед запуском програми python
    • Ви також можете відключити свої докерні тести
ENV PYTHONWARNINGS="ignore::DeprecationWarning"


4

Якщо ви хочете ігнорувати попередження лише у функціях, ви можете зробити наступне.

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


3

Спробуйте наведений нижче код, якщо ви використовуєте 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")

2

Пітон 3

Просто напишіть нижче рядки, які легко запам’ятати перед написанням коду:

import warnings

warnings.filterwarnings("ignore")

0

Якщо ви знаєте, що ви робите, ще один спосіб - просто знайти файл, який попереджає вас (шлях до файлу показано в інформації про попередження), прокоментуйте рядки, які генерують попередження.


0

Для python 3 просто напишіть коди нижче, щоб ігнорувати всі попередження.

from warnings import filterwarnings
filterwarnings("ignore")

-2

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

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


4
Ця порада працює лише в тому випадку, якщо це справді власний код, а не з якогось пакета третьої сторони.
Крістофер Барбер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.