这是一个最近开始发生的奇怪错误。每当我尝试导入不存在的模块时,我会得到TypeError
而不是ImportError
:
$ 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'
这似乎是“你试图从python3调用python2 lib,傻”类型错误,但它显然与我编写的代码无关(正如你可以通过上面的追溯看到的 - 我刚开始一个repl,import missing
,并且发生错误)。这种行为在我安装python 3.6之后不久就开始发生了,但它也发生在我的python3.5 REPL中(我保留了),所以它可能与此无关。
对可能发生的事情有任何猜测?我在importlib中捅了一下,但我在这里几乎不知所措。
编辑:神秘解决,见评论。
答案 0 :(得分:2)
解决了神秘问题:问题出现在〜/ .config / startup.py函数中,它将git存储库root置于系统路径上(这时无论何时cwd位于git存储库中,都可以启动REPL和导入该存储库中定义的模块)。这是将git rev-parse --show-toplevel
的结果插入到sys路径中,这是python 3中的一个bytes对象,导致importlib
抱怨。