«TypeError: аргумент join () должен быть str или байтами, а не« NoneType »» с использованием Magpie + Tensorflow / Python3

Я использую сорока - многозначный классификатор на Tensorflow с Word2vec. Обучение отлично работает с Python 2.7, но с Python 3.x выдает эту ошибку ниже. Я использую Ubuntu 16.04.5 LTS, как ни странно, код Python 3.x отлично работает на другом компьютере с Ubuntu. Я обновил свои зависимости: word2vec, magpie, tf и не уверен, что может пойти не так.

/usr/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88
  return f(*args, **kwds)
Using TensorFlow backend.
/usr/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88
  return f(*args, **kwds)
/usr/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88
  return f(*args, **kwds)
/usr/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88
  return f(*args, **kwds)
/usr/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88
  return f(*args, **kwds)
Traceback (most recent call last):
  File "train_magpie.py", line 1, in <module>
    from magpie import Magpie
  File "/usr/local/lib/python3.5/dist-packages/magpie/__init__.py", line 1, in <module>
    from .main import Magpie
  File "/usr/local/lib/python3.5/dist-packages/magpie/main.py", line 12, in <module>
    from magpie.base.word2vec import train_word2vec, fit_scaler
  File "/usr/local/lib/python3.5/dist-packages/magpie/base/word2vec.py", line 7, in <module>
    from gensim.models import Word2Vec
  File "/usr/local/lib/python3.5/dist-packages/gensim/__init__.py", line 6, in <module>
    from gensim import parsing, matutils, interfaces, corpora, models, similarities, summarization
  File "/usr/local/lib/python3.5/dist-packages/gensim/parsing/__init__.py", line 7, in <module>
    from .preprocessing import *
  File "/usr/local/lib/python3.5/dist-packages/gensim/parsing/preprocessing.py", line 10, in <module>
    from gensim import utils
  File "/usr/local/lib/python3.5/dist-packages/gensim/utils.py", line 50, in <module>
    from smart_open import smart_open
  File "/usr/local/lib/python3.5/dist-packages/smart_open/__init__.py", line 1, in <module>
    from .smart_open_lib import *
  File "/usr/local/lib/python3.5/dist-packages/smart_open/smart_open_lib.py", line 45, in <module>
    from boto.compat import BytesIO, urlsplit, six
  File "/usr/lib/python3/dist-packages/boto/__init__.py", line 1216, in <module>
    boto.plugin.load_plugins(config)
  File "/usr/lib/python3/dist-packages/boto/plugin.py", line 92, in load_plugins
    for file in glob.glob(os.path.join(directory, '*.py')):
  File "/usr/lib/python3.5/posixpath.py", line 89, in join
    genericpath._check_arg_types('join', a, *p)
  File "/usr/lib/python3.5/genericpath.py", line 143, in _check_arg_types
    (funcname, s.__class__.__name__)) from None
TypeError: join() argument must be str or bytes, not 'NoneType'

Вероятно, в вашем коде есть неожиданный побочный эффект, когда переменная, которую вы передаете функции join(), имеет значение None. Вы можете решить эту проблему, проверив, не является ли значение этой переменной None, как это: if x is not None:, и только затем запустив метод join().

zypox 21.08.2018 21:50

попробуйте поймать исключение.

Vizag 21.08.2018 22:01

@holler Это явно не в коде OP, а в boto/plugin.py, так что это не очень полезно.

abarnert 21.08.2018 22:08

Проблема может быть в мусоре в вашем каталоге плагинов Boto и / или config. Вы устанавливали какие-либо плагины или редактировали конфигурацию Boto?

abarnert 21.08.2018 22:09

ааа, вот и все. Я переустановил плагины Boto и это исправило. Уф! Спасибо @abarnert. вы можете написать в качестве ответа?

Santino 21.08.2018 22:11

@ Сантино Хорошо, готово.

abarnert 21.08.2018 22:42
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
3 796
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Исключение составляет boto/plugin.py. По какой-то причине он получает None вместо строки для имени некоторого каталога, а затем пытается скопировать все файлы в None, что терпит неудачу, потому что вы не можете os.path.join шаблон глобуса для None.

Итак, почему он это делает?

Скорее всего, в вашем каталоге плагинов Boto есть какой-то мусор. Или, если его нет, в вашем config. (Было бы неплохо, если бы у boto была лучшая обработка ошибок для этого случая, но, вероятно, это происходит не так часто ...)

Есть хороший шанс, что просто удалите и переустановите плагины Boto, чтобы исправить это.


Для тех, кто читает это в будущем:

Если ваше исключение заканчивается этим (кроме, возможно, других номеров строк и номеров версий):

  File "/usr/lib/python3/dist-packages/boto/__init__.py", line 1216, in <module>
    boto.plugin.load_plugins(config)
  File "/usr/lib/python3/dist-packages/boto/plugin.py", line 92, in load_plugins
    for file in glob.glob(os.path.join(directory, '*.py')):
  File "/usr/lib/python3.5/posixpath.py", line 89, in join
    genericpath._check_arg_types('join', a, *p)
  File "/usr/lib/python3.5/genericpath.py", line 143, in _check_arg_types
    (funcname, s.__class__.__name__)) from None
TypeError: join() argument must be str or bytes, not 'NoneType'

… Это та же ошибка. Но если переустановка ваших плагинов Boto не помогает, вам нужно создать новый вопрос. (И включите результаты вызова find или tree в каталог ваших плагинов, а также содержимое вашего файла конфигурации и все соответствующие номера версий.)

Другие вопросы по теме