什么是不可思议的数字错误?

python中的“坏幻数”ImportError是什么,我该如何解决它?

我能在网上找到的唯一的东西表明这是由编译一个.py - > .pyc文件,然后尝试将它与错误版本的python一起使用引起的。 然而,在我的情况下,该文件似乎有时会导入罚款,但不是其他人,我不知道为什么。

python在回溯中提供的信息并不是特别有用(这就是为什么我在这里要求...),但是在这里它有助于:

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

神奇的数字来自UNIX类型的系统,其中文件的前几个字节持有指示文件类型的标记。

Python在创建它们时会将相似的标记放入其pyc文件中。

然后python解释器在加载时确保这个数字是正确的。

任何损坏这个幻数的东西都会导致你的问题。 这包括编辑pyc文件或试图从不同版本的python(通常在后面)运行pyc而不是解释器。

如果它们是你的pyc文件,只需删除它们并让解释器重新编译py文件。 在UNIX类型的系统上,这可能很简单:

rm *.pyc

要么:

find . -name '*.pyc' -delete

如果它们不是你的,那么你必须得到用于重新编译的py文件,或者可以运行具有该特定魔法值的pyc文件的解释器。

有一件事可能会导致间歇性。 导致问题的pyc只能在特定条件下导入。 它有时不太可能导入。 导入失败时应该检查实际的完整堆栈跟踪?

另外,我所有的2.5.1(r251:54863) pyc文件中的第一个词是62131 2.6.1(r261:67517)62161 。 所有幻数的列表可以在Python/import.c找到,在这里为了完整而复制(答案发布时的当前版本,从那时起它可能已经改变):

1.5:   20121
1.5.1: 20121
1.5.2: 20121
1.6:   50428
2.0:   50823
2.0.1: 50823
2.1:   60202
2.1.1: 60202
2.1.2: 60202
2.2:   60717
2.3a0: 62011
2.3a0: 62021
2.3a0: 62011
2.4a0: 62041
2.4a3: 62051
2.4b1: 62061
2.5a0: 62071
2.5a0: 62081
2.5a0: 62091
2.5a0: 62092
2.5b3: 62101
2.5b3: 62111
2.5c1: 62121
2.5c2: 62131
2.6a0: 62151
2.6a1: 62161
2.7a0: 62171

删除所有.pyc文件将修复“Bad Magic Number”错误。

find . -name "*.pyc" -delete

用python2加载python3生成的*.pyc文件也会导致这个错误。

链接地址: http://www.djcxy.com/p/67239.html

上一篇: What's the bad magic number error?

下一篇: .net dropDownList losing value after postback in IE