什么是错误的魔术数字错误?

问题:

python中的“错误魔数”ImportError是什么,我该如何解决?
我唯一可以在网上找到的内容表明,这是由编译.py – > .pyc文件导致的,然后尝试使用错误的python版本。然而,在我的情况下,该文件似乎进口了好几次,而不是其他的,我不知道为什么。
python在追溯中提供的信息并不是特别有用(这就是为什么我在这里问…),但是在这里它是有帮助的:

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

回答:

魔术数字来自UNIX类型的系统,其中文件的前几个字节保存了指示文件类型的标记。
Python创建时,Python将其类似的标记放入其pyc文件中。
然后python解释器确保这个数字是正确的加载它。
任何损害这个魔术数字的事情都会导致你的问题。这包括编辑pyc文件或尝试从不同版本的python(通常在后面)运行pyc而不是您的解释器。
如果它们是your pyc文件,只需删除它们,并让解释器重新编译py文件。在UNIX类型的系统上,这可能是简单的:

rm *.pyc

要么:

find . -name '*.pyc' -delete

如果他们不是你的,你必须得到py重新编译的文件,或者可以使用具有特定魔术值的pyc文件运行的解释器。
有可能导致间歇性的一件事。导致问题的pyc只能在某些条件下导入。有时不太可能进口。当导入失败时,应该检查实际的完整堆栈跟踪?
除此之外,我的所有2.5.1(r251:54863) pyc文件的第一个字是621312.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

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What’s the bad magic number error?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 75 = 79