0

我有一些涉及 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 部分之前/之后打印一条消息,它会打印第一部分,但不是后者。有很多选项可以导致success = False,而且只有一个,然后我会处理如果success == False 会发生什么(这是一个游戏,测试敌人是否可以找到你,如果没有,然后它尝试别的东西)。我不知道为什么它在未编译时可以捕获它,但在编译时完全失败。有人可以向我解释一下吗?

提前致谢!

4

1 回答 1

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

于 2012-07-17T00:41:47.857 回答