python报错就一定是有错吗_Python-什么是错误的幻数错误?

本文讨论了Python pyc文件中的魔术数字,它是用来标识文件类型的标记。当pyc文件的魔术数字与解释器版本不匹配时,可能会导致导入错误。解决方案包括删除pyc文件或使用与文件匹配的Python版本。魔术数字的列表在Python的import.c源代码中可找到,不同Python版本对应不同的数值。
摘要由CSDN通过智能技术生成

小编典典

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

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

然后,python解释器会在加载时确保此数字正确。

任何损坏此幻数的东西都会引起你的问题。这包括编辑pyc文件或尝试pyc从解释器以外的其他版本的python(通常更高版本)运行。

如果它们是你的 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

2020-02-22

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值