尝试/除了在编译的Python中没有捕获错误

时间:2012-07-17 00:22:07

标签: python exception-handling compilation try-catch except

我有一些涉及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会发生什么(这是一个游戏,测试一个敌人可以找到你,如果没有,然后它尝试别的东西)。我不知道为什么它可以在未编译时捕获它但在编译时完全失败。有人可以向我解释一下吗?

提前致谢!

1 个答案:

答案 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_mapdijkstra_new返回。地图中的每个方块都不需要单独的地图。我认为你应该更彻底地阅读文档:  http://doryen.eptalys.net/data/libtcod/doc/1.5.0/index.html