2015-07-31 15 views
1

В основном, моя программа Python ведет себя так, как если бы я звонил os.abort(), хотя я обычно уходил с sys.exit() (без параметров).Программа Python abort() - ed при нормальном выходе всякий раз, когда импортируется модуль Cython.

Это дает мне стандарт «Это приложение попросило Runtime прекратить его необычным способом», когда программа завершается. Это не crashing (ну, если что-то не происходит внутри процедур выключения, но я не вижу никаких доказательств этого), он заканчивается только тогда, когда он должен заканчиваться - он просто выдает раздражающее диалоговое окно всякий раз, когда он это делает.

Я использую atexit для некоторых вещей, но комментирую крючок, и оператор импорта ничего не меняет. У меня есть глобальный обработчик исключений вокруг основного цикла, но я не вижу, как это может быть и оно.

Вот сказал обработчик:

try: 
    while True: 
     #... 
except Exception: 
    if _distributable: 
     #Crash reporting! Yay! 
     send_error_report("Unhandled exception") 
    else: 
     raise 

Это происходит с регулярным ола»Python; это происходит после того, как он был заморожен с помощью cx_freeze, но это не может быть причиной, потому что это также происходит, если я просто запускаю сценарий .py в своей среде IDE.

Я использую модуль Cython для некоторых простых хрустов, если это может иметь какое-либо отношение к нему.

EDIT:

Комментирование импорта Cython неподвижного его. Теперь я просто должен понять, почему Cython является причиной этого ...

Вот код Cython в полном объеме:

import pygame 
cimport numpy 
import numpy.random 
from libc.stdlib cimport abs 

cpdef chromatic_aberration(surface,int intensity=5): 
    cdef int x,y,z,maxx,maxy 
    cdef numpy.ndarray[unsigned char,ndim=3] array 
    cdef numpy.ndarray[unsigned char,ndim=2] r,g,b 
    r=pygame.surfarray.pixels_red(surface) 
    g=pygame.surfarray.pixels_green(surface) 
    b=pygame.surfarray.pixels_blue(surface) 
    array=pygame.surfarray.pixels3d(surface) 

    maxx,maxy=surface.get_rect().bottomright 

    for x in range(maxx): 
     for y in range(maxy): 
      try: 
       pass 
       array[x,y,0]=r[x+intensity,y] 
       array[x,y,1]=g[x,y+intensity] 
       array[x,y,2]=b[x+intensity,y-intensity] 
      except IndexError: 
       pass 

cpdef mapped_chromatic_aberration(surface, numpy.ndarray[int,ndim=2] intensitymap): 
    cdef int x,y,z,maxx,maxy,intensity 
    cdef numpy.ndarray[unsigned char,ndim=3] array 
    cdef numpy.ndarray[unsigned char,ndim=2] r,g,b 
    r=pygame.surfarray.pixels_red(surface) 
    g=pygame.surfarray.pixels_green(surface) 
    b=pygame.surfarray.pixels_blue(surface) 
    array=pygame.surfarray.pixels3d(surface) 

    maxx,maxy=surface.get_rect().bottomright 

    for x in range(maxx): 
     for y in range(maxy): 
      try: 
       intensity=intensitymap[x,y] 
       array[x,y,0]=r[x+intensity,y] 
       array[x,y,1]=g[x,y+intensity] 
       array[x,y,2]=b[x+intensity,y-intensity] 
      except IndexError: 
       pass 

cpdef random_chromatic_aberration(surface,int intensity=5): 
    mapped_chromatic_aberration(surface,numpy.random.random_integers(-intensity,intensity,surface.get_rect().bottomright)) 

cpdef chroma_warp(surface,int x, int y, int radius, int power): 
    cdef numpy.ndarray[int,ndim=2] warpmap 
    warpmap=numpy.zeros(surface.get_size(), dtype=numpy.int) 
    cdef int maxdist = radius ** 2 
    cdef int maxx, minx, maxy, miny, warpx, warpy 

    for xofst in range(-radius, radius): 
     for yofst in range(-radius, radius): 
      warpx=x+xofst 
      warpy=y+yofst 
      warpmap[warpx,warpy] = ((abs(xofst) + abs(yofst)) * power) // 100 

    mapped_chromatic_aberration(surface, warpmap) 

Это также не произойдет, если я запускаю программу с отладчиком.

ответ

0

Я удалил fx.pyd, Киттон перекомпилировал, и вдруг все было в порядке. Должны быть гремлины.

 Смежные вопросы

  • Нет связанных вопросов^_^