我有一个是写在Python和用Cython的组合应用。我最近添加了一个新功能并对此应用程序进行测试。测试通过我的本地机器(macbook),但是当我推送到appveyor(Windows CI服务)时,测试失败。这本身并不奇怪。当我将打印语句添加到我的Cython代码中以试图查看appveyor上运行时发生的情况时,测试不再失败。这是令人沮丧的,因为它让我无法找出appveyor上测试失败时发生的情况。它也只是令人困惑,因为它违反了我对Python和Cython如何工作的理解。添加打印语句用Cython代码影响输出
我的代码是复杂的,有我分享这种现象的一个例子没有合理的方式。但是,我正在寻找可能发生的原因。如何以及在什么情况下,Cython代码中的打印语句对其他计算有影响?
问题被证明是一个未初始化的整数,它需要被初始化为零。无论如何,在macbook上它始于零,但我猜想在Windows上它只是随机值在内存位置。我仍然不明白的是,为什么打印一个特定的其他变量组合似乎解决了这个问题。不过,我怀疑这与你所描述的内容很接近。 – jcrudy
啊哈!我很失望你的代码允许未初始化的变量;我非常习惯于获得运行时错误的第一个参考。是的,我期望添加的** print **恰好碰巧碰到了一个0位的位置,为您所需。 – Prune
在正常的Python中,当您尝试使用未初始化变量的值时,确实会出现运行时错误。在Cython中,你可以声明一个类似于C的变量而不用初始化它。所以我宣布了一个int计数器,但忘记将其初始值设置为零。 – jcrudy