2017-01-30 1 views
2

Вот странная ошибка, которая началась в последнее время. Всякий раз, когда я пытаюсь импортировать модуль, который не существует, я получаю TypeError вместо ImportError:Python TypeError («необходим байтовый объект, а не« str ») всякий раз, когда отсутствует импорт.

$ python 
Python 3.6.0 (default, Jan 30 2017, 10:05:52) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import missing 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<frozen importlib._bootstrap>", line 961, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 946, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 885, in _find_spec 
    File "<frozen importlib._bootstrap_external>", line 1157, in find_spec 
    File "<frozen importlib._bootstrap_external>", line 1129, in _get_spec 
    File "<frozen importlib._bootstrap_external>", line 1268, in find_spec 
    File "<frozen importlib._bootstrap_external>", line 60, in _path_join 
    File "<frozen importlib._bootstrap_external>", line 60, in <listcomp> 
TypeError: a bytes-like object is required, not 'str' 

Это, кажется, «вы пытались вызвать python2 экспромты из Python3, глупенький» ошибка типа, но он явно не имеет никакого отношения к коду, который я написал (как вы можете видеть по вышеуказанной трассировке), я просто запустил repl, import missing, и ошибка произошла). Такое поведение началось вскоре после того, как я установил python 3.6, но это также происходит в моем python3.5 REPL (который я поддерживал), поэтому, вероятно, это не связано с этим.

Любые предположения относительно того, что может происходить? Я немного поиграл в importlib, но я в значительной степени просто в затруднении.

EDIT: Тайна решена, см. Комментарий.

+1

Это происходит при любом импорте, которого нет, не так ли? Существует не какой-то сумасшедший конфликт, когда на самом деле у вас есть пакет под названием 'missing', верно? – BlackVegetable

+0

huh, каковы версии Python? Я не могу воссоздать это с помощью «3.5.3rc1 +», «3.6.0 +» или «3.7.0a0». –

+0

@BlackVegetable correct; то же самое происходит с произвольными именами импорта мусора. – So8res

ответ

2

Тайна решена: проблема была в функции ~/.config/startup.py, которая помещала корень репозитория git на системный путь (так что всякий раз, когда ваш cwd находится в репозитории git, вы можете запустить REPL и модули импорта, определенные в этом репозитории). Это вставляло результат git rev-parse --show-toplevel на путь sys, и это объект байтов в python 3, который вызывает жалобу importlib.

+1

Это была линия проверки исходного кода, которая заставила меня заподозрить что-то напуганное, что привело к этому ответу: https://hg.python.org/cpython/file/3.6/Lib/importlib/_bootstrap_external.py#l60 – BlackVegetable

Смежные вопросы