【问题标题】:Python: catching error + printing to filePython:捕获错误+打印到文件
【发布时间】:2016-06-30 14:21:11
【问题描述】:

我想知道是否有一种方法可以捕获导致脚本崩溃的任何(和所有)类型的错误,但可能不使用try 来捕获特定异常。

我有一个 webdriver 脚本,它可以做很多事情,比如点击链接、发送密钥等等,但我无法预测它会在哪里崩溃。我想按顺序运行一系列测试并将结果打印到文件中 - 包括任何错误/崩溃: 例如。

Test01 - Success!   
Test02 - NameError: name 'driver' is not defined !ERROR!
Test03 - Success!

等等。

这样最后我就可以打开文本文件并检查哪些测试需要修复并重新运行。

现在我一直在使用带有较小代码块的 try/exception,但在我看来,我必须以某种方式将整个脚本包含在 try/catch/exception 中才能得到我想要的。

有没有更好的方法来捕捉脚本崩溃后显示的任何类型的错误,如下图所示:

【问题讨论】:

标签: python error-handling


【解决方案1】:

您可以使用普通的except 来捕获任何和所有异常,如下所示:

try:
    some code here
except:
    print 'whoops, something went wrong'

但是,这并没有为您提供有关异常的任何信息,因此您可能不想这样做。

你也可以抓到很宽泛的Exception,像这样:

try:
    some code here
except Exception as ex:
    print 'oops, caught this error: %s' % ex

这是一种更好的方法,因为它可以告诉您到底出了什么问题。

【讨论】:

  • 我应该把整个脚本放在 try / exception 中并缩进整个脚本吗?
  • @Alichino 可以,但是您可能会发现它捕获的错误比您想要的要多。
【解决方案2】:

您正在寻找的技巧似乎是将标准错误重定向到文件或标准输出。

Python 发生异常时会将异常写入 stderr 。 只需将 stderr 重定向到运行 python 程序时的相同输出文件

喜欢这个

python 文件.py &> 输出文件

【讨论】:

  • 当我在 ipython 中这样做时,不会创建文件。在普通命令行中,它对我说:“命令的语法不正确。”
  • 检查这个问题stackoverflow.com/questions/14571090/…。它将向您展示可用于在 iPython 中重定向输出的代码。所以使用该代码并将stderr和stdout重定向到同一个文件
  • 看起来不错,但我认为这太麻烦了... :) 我想我会在开头打印 Test_Number: ,然后在 driver.quit() 之前添加SUCCESS!,这样当任何测试在到达那条线之前崩溃时,我只会看到测试编号:并且我会知道出了点问题。但不知道到底是什么。
  • 老实说,最简单的方法是用 try 包装代码,除非像 @John Gordon 说的那样。这是最少的工作量和更正确的解决方案(我的解决方案是 hacky,基于您不使用 try 的要求)
猜你喜欢
  • 1970-01-01
  • 2014-08-19
  • 2019-04-29
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
  • 2021-05-31
  • 2016-06-18
  • 1970-01-01
相关资源
最近更新 更多