我有一个算法的测试用例,它在第一次执行后给出了不同的结果。
测试从两个文件中导入算法和测试数据。
第一次执行返回正确的结果并为测试数据文件创建一个 .pyc 文件。第二次和所有后续执行返回不正确的结果。当我删除测试数据的 .pyc 文件时,下一次执行会再次返回正确的结果(并再次创建一个新的 .pyc 文件)。
当我将测试数据移动到与测试用例本身相同的文件中时(即避免创建 .pyc 文件),测试总是通过。
我无法将此修复程序应用于我的完整程序。
这是一个已知问题,有解决办法吗?
.pyc 文件包含字节码,这是 Python 解释器将源代码编译成的内容。然后,此代码由 Python 的虚拟机执行。
Python 的文档解释了这样的定义:
Python 是一种解释语言,而不是编译语言,尽管由于字节码编译器的存在,区别可能会很模糊。这意味着可以直接运行源文件,而无需显式创建可执行文件然后运行
仅当其他脚本导入该 python 文件时,才会创建(并且可能覆盖) .pyc 文件。如果调用了导入,Python 会检查 .pyc 文件的内部时间戳是否与对应的 .py 文件匹配。如果是,它会加载 .pyc;如果不存在或 .pyc 尚不存在,Python 会将 .py 文件编译为 .pyc 并加载它。
我发现更改的一件事是文件的值(.pyc 与 .py),这让我编写了一个调用堆栈跟踪的实用程序。