【发布时间】:2012-07-15 21:36:19
【问题描述】:
我有一些涉及 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 会发生什么(这是一个游戏,测试敌人是否可以找到你,如果没有,然后它尝试别的东西)。我不知道为什么它在未编译时可以捕获它,但在编译时完全失败。有人可以向我解释一下吗?
提前致谢!
【问题讨论】:
-
当你说它“崩溃”时,究竟发生了什么?另外,“编译”是什么意思?如果你只是从命令行运行脚本(python foo.py),它可以工作吗?
-
Windows 遇到错误,即使我启用控制台,也没有控制台消息,它会死掉。这是使用py2exe;我在 Windows 上,我不确定如何执行命令行版本。如果我在 IDLE 中只选择“运行模块”选项(我对 Python 还是有点陌生),那么它可以完美地处理 try/except。
-
我以前用过那个库。由于 python 版本是 C++ 库的包装器,因此它偶尔会遇到未正确引发为 python 错误的段错误。这就是这里发生的事情吗?
-
啊,不用担心 - 我找到了解决它的方法,因为我发现如果找不到路径,函数实际上会返回 False,所以我不需要尝试尝试/除外。还是谢谢大家!
-
那么……它实际上是在 IDLE 中引发异常还是您的整个问题都错了?
标签: python exception-handling compilation try-catch except