每当缺少导入时,Python TypeError(“类似于字节的对象,而不是'str'”)

时间:2017-01-30 18:19:56

标签: python python-3.x

这是一个最近开始发生的奇怪错误。每当我尝试导入不存在的模块时,我会得到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中捅了一下,但我在这里几乎不知所措。

编辑:神秘解决,见评论。

1 个答案:

答案 0 :(得分:2)

解决了神秘问题:问题出现在〜/ .config / startup.py函数中,它将git存储库root置于系统路径上(这时无论何时cwd位于git存储库中,都可以启动REPL和导入该存储库中定义的模块)。这是将git rev-parse --show-toplevel的结果插入到sys路径中,这是python 3中的一个bytes对象,导致importlib抱怨。