基本上,我的Python程序就像我调用os.abort()
一样,即使我正常退出sys.exit()
(没有参数)。
它给了我标准"此应用程序已要求运行时以不寻常的方式终止它"当程序终止时。它不是崩溃,(好吧,除非在关机例程中发生了某些事情,但我没有看到任何证据),它只会在它出现时终止。 ; s应该终止 - 只要它出现就会弹出一个恼人的对话框。
我使用atexit
进行某些操作,但是注释掉了钩子并且import语句没有任何改变。我在主循环周围有一个全局异常处理程序,但我也不知道它是怎么回事。
这里说处理程序:
try:
while True:
#...
except Exception:
if _distributable:
#Crash reporting! Yay!
send_error_report("Unhandled exception")
else:
raise
这种情况发生在常规的ol'蟒蛇;它也会在被cx_freeze冻结之后发生,但这可能不是原因,因为如果我只是在IDE中运行.py脚本也会发生这种情况。
我使用Cython模块进行一些简单的数字运算,如果这可能与它有任何关系。
编辑:
注释掉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 :(得分:0)
I deleted fx.pyd
, Cython recompiled, and suddenly everything was fine. Must be gremlins.