【问题标题】:Set Python to Quit On Exception?将 Python 设置为异常退出?
【发布时间】:2014-08-31 11:49:59
【问题描述】:

我正在使用Python 3

我一直在寻找这个问题的答案,但还没有找到。基本上,我在游戏引擎中运行了几个 Python 脚本,每个脚本都有自己的入口点。

我不想在我的所有代码中添加try: except blocks,所以我想知道是否有可能告诉 Python 在找到第一个错误时退出(或者可能为该“回调”分配一个自定义函数) ,不管它在哪里或发现了什么?

目前,游戏引擎会在发现并遇到错误后继续运行,这使得诊断问题变得比必要的困难,因为遇到一个错误可能会使后续脚本无法工作(因为它依赖于错误脚本的变量设置,例如)。有任何想法吗?

我知道我可以将控制台重定向到一个文件以便更轻松地滚动,但仅捕获第一个错误并提前停止游戏将非常有用。

好的,还有一些额外的信息 - 很抱歉没有说出来。我使用的引擎(Blender 游戏引擎)是用 C 编码的,所以更改源代码比我想做的要多。


在谷歌搜索之后,似乎有人问了here 一个类似的问题并给出了可靠的答案,这是如何获取最后一个引发的异常。如果我检查 sys 模块是否存在 last_value 变量并且它存在,那么我可以提前退出,因为控制台已经打印出错误。

感谢您的帮助。

【问题讨论】:

  • 如果它在出错后继续,它已经遇到了 try/catch 块...
  • 如果后续脚本失败,说明它们耦合得太紧了。首先在它们之间的接口点上添加验证。
  • 如果您在查看问题所在时遇到问题,那么设置 logging 会很有用
  • @Basic - 我没有添加,所以我想这是可能的。
  • @jonrsharpe - 如果没有必要,我宁愿不编辑引擎的 C 源代码。

标签: python


【解决方案1】:

您可以使用atexit.register() 注册一个将在程序终止时调用的函数。终止后,您必须使用当前的traceback object 打印有关发生的异常(如果有)的调试信息。

注意:这里假设异常不会被游戏代码捕获,因为它依赖异常来终止执行。

【讨论】:

  • 嗯,这听起来很有趣,但似乎无法让我在第一个异常时停止程序。我实际上想要做的是抓住最后一个引发的异常,无论它是从代码中的哪个位置引发的。
  • 它会让你访问第一个威胁终止程序的异常。如果您的程序逻辑已经捕获了异常,那么您将无能为力。
猜你喜欢
  • 2013-05-23
  • 2011-10-06
  • 2015-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
相关资源
最近更新 更多