2017-01-30 37 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' 

这似乎是一个“你试图调用从python3一个python2 LIB,傻”式的错误,但它显然与我写的代码无关(正如你可以通过上述回溯看到的 - 我刚开始一个repl,import missing,并且发生错误)。这种行为在我安装python 3.6后不久就开始发生,但它也发生在我的python3.5 REPL(我一直保留)中,所以它可能与此无关。

任何猜测可能会发生什么?我在importlib中搜索了一下,但在这里我几乎感到茫然。

编辑:神秘解决了,看评论。

+1

这发生在任何不存在的导入上,对吗?有没有一些疯狂的冲突,你实际上有一个名为“失踪”的包,对吧? – BlackVegetable

+0

呵呵,什么是Python版本?我不能用'3.5.3rc1 +','3.6.0 +'或'3.7.0a0'重新创建这个。 –

+0

@BlackVegetable正确;任意垃圾导入名称都会发生同样的情况。 – 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

相关问题