Skip to main content
 首页 » 编程设计

每当缺少导入时,Python TypeError ("a bytes-like object is required, not ' str'")

2024年10月01日10jpfss

这是最近开始出现的一个奇怪错误。每当我尝试导入一个不存在的模块时,我都会得到一个 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 库,愚蠢”类型的错误,但它显然与我编写的代码无关(正如你从上面的回溯中看到的——我只是开始一个 repl,import missing,然后发生错误)。这种行为在我安装 python 3.6 后不久就开始发生,但它也发生在我的 python3.5 REPL(我保留它)中,所以它可能与此无关。

对可能发生的事情有任何猜测吗?我在 importlib 中四处寻找了一下,但我在这里几乎不知所措。

编辑:谜底已解,见评论。

请您参考如下方法:

谜团解决了:问题出在 ~/.config/startup.py 函数中,该函数将 git 存储库根目录放到系统路径中(这样无论何时您的 cwd 在 git 存储库中,您都可以启动 REPL 和导入在该存储库中定义的模块)。这是将 git rev-parse --show-toplevel 的结果插入到 sys 路径中,这是 python 3 中的字节对象,这会导致 importlib 报错。