什么是“坏魔法数字”ImportError在python,我如何解决它?

我能在网上找到的唯一一件事表明,这是由编译一个.py -> .pyc文件引起的,然后试图使用错误版本的python。然而,在我的例子中,文件有时似乎导入得很好,但有时却不行,我不知道为什么。

python在回溯中提供的信息不是特别有用(这就是为什么我在这里问…),但如果它有帮助的话,它在这里:

Traceback (most recent call last):
  File "run.py", line 7, in <module>
    from Normalization import Normalizer

当前回答

我刚刚在Fedora26中遇到了同样的问题,由于6的魔法数字不好,许多工具(如dnf)都被破坏了。 由于一个未知的原因,我有一个文件/usr/bin/ 6。派克,带着意想不到的神奇数字。删除这个文件可以解决这个问题

其他回答

如果您手动以.pyc扩展名命名文件,也会发生“坏魔术数字”错误

加载一个python3生成的*。带有python2的Pyc文件也会导致此错误。

这比上面的方法更有效。

find {directory-of-.pyc-files} -name "*.pyc" -print0 | xargs -0 rm -rf

{目录-。Pyc-files}是包含已编译的python文件的目录。

在我的例子中,它不是.pyc,而是我重命名自己的模块后的旧二进制.mo翻译文件,所以在这个模块文件夹中我必须运行

find . -name \*.po -execdir sh -c 'msgfmt "$0" -o `basename $0 .po`.mo' '{}' \;

(请先备份并修复.pyc文件)

在我的情况下,我已经克隆了一个库的解释器

#!/usr/bin/env python

虽然python指向Python2.7,但我的主要代码是使用python3.6运行的……它仍然创建了一个*。Pyc文件2.7版本…

我可以说这个错误可能是2.7和3+版本混合的结果,这就是为什么清理(以任何你能想到的你正在使用的方式)在这里会有帮助…

别忘了调整那些Python2x代码-> python 3…