我有一些涉及Try和Except子句的代码。当我在IDLE的控制台中运行它时,它运行正常,并且永远不会崩溃。但是,当我编译它时无法捕获错误,所以程序崩溃了,这让我很生气!
代码是:
if self.height == 6:
try:
libtcod.path_compute(minimap[self.mapx][self.mapy].path3,self.x+60, self.y+60,target_x+60, target_y+60)
stepx, stepy = libtcod.path_get(minimap[self.mapx][self.mapy].path3, 0)
dx = stepx - self.x - 60
dy = stepy - self.y - 60
except:
success = False
我正在使用libtcod库。这是有时失败的stepx / stepy位,事情是,我知道它有时可能会失败;它只是没有抓住它!我试过在stepx部分之前/之后打印一条消息,它会打印第一部分,但不打印后者。有很多选项可以导致成功= False,这只有一个,然后我会处理如果成功= = False会发生什么(这是一个游戏,测试一个敌人可以找到你,如果没有,然后它尝试别的东西)。我不知道为什么它可以在未编译时捕获它但在编译时完全失败。有人可以向我解释一下吗?
提前致谢!
答案 0 :(得分:3)
尝试检查传递给崩溃程序的libtcod函数的所有参数(在本例中为libtcod.path_get
)。当你传递不正确的参数而不是提出一个好的错误信息时,Libtcod经常会出现段错误,我对视图工具包有同样的问题。
如果由于某种原因使用py2exe“编译”的版本中这些值不同,那么这可以解释为什么它有时只会崩溃。
这部分看起来有问题:
minimap[self.mapx][self.mapy]
如果您有这样的嵌套数组:
minimap = [[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]]
然后要引用位置(x,y)处的项目,您必须使用minimap[y][x]
编辑:
libtcod.path_get
的第一个参数应该是用于路径查找的地图,由path_new_using_map
或dijkstra_new
返回。地图中的每个方块都不需要单独的地图。我认为你应该更彻底地阅读文档:
http://doryen.eptalys.net/data/libtcod/doc/1.5.0/index.html