2

我想检查 Python unittest 中的异常,具有以下要求:

  • 需要报告为失败,而不是错误
  • 绝不能吞下原来的异常

我见过很多形式的解决方案:

try:
    something()
except:
    self.fail("It failed")

不幸的是,这些解决方案吞下了最初的例外。有什么办法可以保留原始异常?

我最终使用了 Pierre GM 答案的变体:

try:
   something()
except:
    self.fail("Failed with %s" % traceback.format_exc())
4

1 回答 1

2

如建议的那样,您可以使用通用异常的上下文:

except Exception, error:
    self.fail("Failed with %s" % error)

您还可以通过以下方式检索与异常相关的信息sys.exc_info()

try:
    1./0
except:
    (etype, evalue, etrace) = sys.exc_info()
    self.fail("Failed with %s" % evalue)

元组(etype, evalue, etrace)在这里(<type 'exceptions.ZeroDivisionError'>, ZeroDivisionError('float division',), <traceback object at 0x7f6f2c02fa70>)

于 2012-09-20T10:17:44.787 回答