【问题标题】:Python system log filePython 系统日志文件
【发布时间】:2012-08-03 12:39:16
【问题描述】:

我有一个脚本(看似)不可预测地崩溃了。我不知道如何重现它。

Python是否保留了一个全局系统日志文件,所以我可以回去看看是什么异常导致了退出?如果是这样,在 Windows 上的哪里可以找到它?如果可能的话,我也希望能够看到回溯。

编辑:我知道我可以将整个脚本放在 try...except 块中,但我不知道在它之前我会运行多久再次崩溃。我希望至少能够获得一些关于已经发生的崩溃的粗略信息,即使这些信息只是导致崩溃的异常类型。这样我就可以尝试更可靠地重现错误。

我怀疑崩溃是由于与外部设备的通信失败(可能是简单的电缆松动)造成的。这类故障本质上是随机的,难以重现,所以我想知道是通信错误还是真正的代码错误。

【问题讨论】:

  • 查看 python 文档中的“事后”调试。
  • 您要运行的脚本是什么?你能在你认为出现问题的地方贴一个小sn-p吗?
  • 看起来 pdb 中的事后调试器仅适用于最后一次崩溃,并且在解释器的同一实例中。我希望能够查看 Python 在过去 24 小时内(比如说)崩溃的所有时间的列表,看看出了什么问题。这可能吗?
  • 问题是我不确定问题出在哪里。该脚本与几个外部设备对话,我怀疑其中一个是罪魁祸首。如果我有一份最近的例外情况列表,我就可以着手找出问题的真正原因。
  • @poorsod 也许如果您的脚本中有基于文件的日志记录(带有时间戳、实例标识符、python 版本)和回溯,您可以参考日志文件并查明问题。由于它似乎只是偶尔发生,你确定你在解释器的所有实例上都使用了正确的 python 版本吗?

标签: python exception logging


【解决方案1】:

如果您想了解有关异常的信息,可以使用此代码。

try:
    #do some stuff
    1/0 #stuff that generated the exception
except Exception as ex:
    print ex
    raw_input()

为了正确调试它,有一个工具winpdb。有一个非常好的教程可供它学习使用它进行调试debugging tutorial

【讨论】:

  • 我非常熟悉try...except 和调试技术。我希望能够回到半小时前崩溃的实例并找出发生了什么。
【解决方案2】:

你能“抓住”exception吗?如果是,那么您可以使用traceback 打印堆栈跟踪并查明问题发生的位置。

然后您可以使用 Eclipse 调试有问题的模块(即使它是 python 库的一部分,它也将是普通可读的形式)。


import traceback
...
...

try:
    <your script>
except Exception as runtime_ex:
    print runtime_ex, traceback.format_exc()

【讨论】:

    猜你喜欢
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    相关资源
    最近更新 更多