Почему это предупреждение о прекращении выполнения останавливает выполнение кода? - PullRequest
0 голосов
/ 24 ноября 2018

Я пытался использовать TfidifVectorizer и CountVectorizer из пакета Sci-Kit Learn, но при их импорте:
from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer

я получаю следующее предупреждение:

/ anaconda3 / lib / python3.7 / site-packages / sklearn / feature_extraction / text.py: 17: DeprecationWarning: использование или импорт АВС из «коллекций» вместо «коллекций.abc» не рекомендуется, и в3.8 он перестает работать из импорта коллекций Mapping, defaultdict

Мой код перестает работать после этого, даже если сообщение является просто предупреждением, указывающим, что возникает ошибка (даже если об ошибке не сообщается).Я полагаю, что это истинная причина, по которой я спрашиваю о предупреждении, потому что это все, от чего я должен уйти.Это ошибка с SKLearn?После обновления до python 3.7 разработчики отстают?Будем весьма благодарны за любые предложения о том, следует ли мне сообщать об этом или как вернуться к Python 3.6 с использованием anaconda, чтобы обойти это.Спасибо!

1 Ответ

0 голосов
/ 24 ноября 2018

Маловероятно, что это предупреждение об устаревании вызывает проблему.По умолчанию все предупреждения просто распечатывают сообщение и затем продолжают.Предупреждения можно рассматривать как исключения, но тогда вместо текста предупреждения вы увидите трассировку стека.Предупреждения об устаревании предназначены для разработчиков, чтобы сообщить им, что их библиотека сломается для будущих выпусков Python.Они не предназначены для конечных пользователей, так как код все еще отлично работает.В данном случае, согласно предупреждению, from collections import Mapping, defaultdict все еще работает в вашей версии python (3.7), но не работает в python 3.8.

Таким образом, это предупреждение вряд ли будет источникомпроблема.Это происходит потому, что sklearn изменяет фильтры предупреждений по умолчанию, чтобы пользователи могли видеть предупреждения об устаревании, выданные sklearn.Предупреждения не изменяют поток выполнения, если они не будут рассматриваться как ошибки.Чтобы убедиться, что предупреждение не является проблемой, попробуйте запустить программу в этом жгуте.Это довольно странно, но необходимо остановить sklearn, переопределяя фильтры предупреждений по умолчанию.Поиграв со значениями фильтра предупреждений, вы сможете увидеть, что предупреждение об устаревании не является источником вашей проблемы.

import warnings
from warnings import (
    filterwarnings as original_filterwarnings, 
    simplefilter as original_simplefilter
)

def ignore_filterwarnings(*args, **kwargs):
    pass

def ignore_simplefilter(*args, **kwargs):
    pass

warnings.filterwarnings = ignore_filterwarnings
warnings.simplefilter = ignore_simplefilter

# no imports of sklearn should occur before the previous two lines (otherwise sklearn
# will get to use the original functions).

with warnings.catch_warnings():
    original_simplefilter("ignore")  # or "error" to see the difference

    from my_main_module import main
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...