У меня есть приложение, написанное в комбинации Python и Cython. Недавно я добавил новую функцию и тесты для этого приложения. Тесты проходят на моей локальной машине (macbook), но когда я нажимаю на appveyor (служба Windows CI), тесты терпят неудачу. Это само по себе не так странно. Когда я добавляю инструкции печати к своему Cython-коду, пытаясь увидеть, что происходит, когда оно работает на апплеере, тесты больше не терпят неудачу. Это разочаровывает, потому что это не дает мне понять, что происходит, когда тесты терпят неудачу на апвейере. Это также просто озадачивает, потому что это нарушает мое понимание того, как работают Python и Cython в целом.Добавление операторов печати в код cython влияет на вывод
Мой код сложный, и для меня нет разумного способа поделиться примером этого явления. Тем не менее, я ищу причины, которые могут произойти. Как и в каких ситуациях утверждение печати в коде Cython влияет на другие вычисления?
Проблема оказалась неинициализированным целым числом, которое необходимо было инициализировать до нуля. В macbook это все равно начиналось с нуля, но я полагаю, что в Windows это было просто случайное значение в памяти. Я еще не понимаю, почему печать конкретной комбинации других переменных, по-видимому, устраняет проблему. Тем не менее, я подозреваю, что это нечто близкое к тому, что вы описываете. – jcrudy
Aha! Я разочарован тем, что ваш код разрешил неинициализированную переменную; Я довольно привык к первой ссылке, получающей ошибку во время выполнения. Да, я ожидаю, что добавленный ** print ** просто ударил кулак из 0 бит в нужное место для вас. – Prune
В обычном Python вы получаете ошибку во время выполнения при попытке использовать значение неинициализированной переменной. В Cython вы можете объявить переменную типа C, не инициализируя ее. Поэтому я объявил int counter, но забыл установить его начальное значение на ноль. – jcrudy