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