代码之家  ›  专栏  ›  技术社区  ›  Noah

什么是坏的幻数错误?

  •  259
  • Noah  · 技术社区  · 17 年前

    python中的“坏幻数”是什么?如何修复它?

    我在网上找到的唯一一件事表明,这是编译.py->造成的。pyc文件,然后尝试将其与错误版本的python一起使用。然而,在我的例子中,该文件在某些情况下似乎导入良好,但在其他情况下导入不好,我不知道为什么。

    python在回溯中提供的信息并不是特别有用(这就是为什么我在这里问…),但这里是为了以防万一:

    Traceback (most recent call last):
      File "run.py", line 7, in <module>
        from Normalization import Normalizer
    
    12 回复  |  直到 17 年前
        1
  •  0
  •   mayaki ujeh    6 年前

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

    Python将类似的标记放入其 pyc

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

    任何破坏这个神奇数字的东西都会给你带来麻烦。这包括编辑 pyc 文件或尝试运行 pyc

    pyc 文件,只需删除它们,然后让解释器重新编译 py 文件夹。在UNIX类型的系统上,这可能非常简单:

    rm *.pyc
    

    或:

    find . -name '*.pyc' -delete
    

    如果它们不是你的,你要么得到 派克 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