我有一個是寫在Python和用Cython的組合應用。我最近添加了一個新功能並對此應用程序進行測試。測試通過我的本地機器(macbook),但是當我推送到appveyor(Windows CI服務)時,測試失敗。這本身並不奇怪。當我將打印語句添加到我的Cython代碼中以試圖查看appveyor上運行時發生的情況時,測試不再失敗。這是令人沮喪的,因爲它讓我無法找出appveyor上測試失敗時發生的情況。它也只是令人困惑,因爲它違反了我對Python和Cython如何工作的理解。添加打印語句用Cython代碼影響輸出
我的代碼是複雜的,有我分享這種現象的一個例子沒有合理的方式。但是,我正在尋找可能發生的原因。如何以及在什麼情況下,Cython代碼中的打印語句對其他計算有影響?
問題被證明是一個未初始化的整數,它需要被初始化爲零。無論如何,在macbook上它始於零,但我猜想在Windows上它只是隨機值在內存位置。我仍然不明白的是,爲什麼打印一個特定的其他變量組合似乎解決了這個問題。不過,我懷疑這與你所描述的內容很接近。 – jcrudy
啊哈!我很失望你的代碼允許未初始化的變量;我非常習慣於獲得運行時錯誤的第一個參考。是的,我期望添加的** print **恰好碰巧碰到了一個0位的位置,爲您所需。 – Prune
在正常的Python中,當您嘗試使用未初始化變量的值時,確實會出現運行時錯誤。在Cython中,你可以聲明一個類似於C的變量而不用初始化它。所以我宣佈了一個int計數器,但忘記將其初始值設置爲零。 – jcrudy