python-2.7 - 检查 Python 2.7 中是否正确引发异常?

标签 python-2.7 exception exception-handling python-unittest

有谁知道如何检查是否正确引发了异常?

我需要能在 Python 2.7 中运行的东西。下面的“断言”不是从 Python unittest 库中使用的完全正确的方法:

assert ( a_a0_getinst.add_port("iTCK", ISC.PortType_INPUT) ), "Can't add duplicate port"

我得到的错误是:

Traceback (most recent call last):
  File "test_010_module.py", line 157, in runTest
    a_a0_addinst = a_a0.add_instance( "A00", b_a0 )
  File "/nfs/sc/disks/sc_dteg_2004/users/acheung1/dteg_tools-isc/python/t/ISC.py", line 475, in add_instance
    return _ISC.SharedModule_add_instance(self, name, module)
RuntimeError: Can't add duplicate instance with instance name 'A00' to module 'A_A0'

最佳答案

如果您只是想确保它引发正确类型的异常,您可以使用:

self.assertRaises(RuntimeError, your_function, *args, **kwargs)

在 unittest.TestCase 类中。参见 the docs for assertRaises .

如果您还想检查它是否也有正确的错误消息,您可以改用:

self.assertRaisesRegexp(RuntimeError, "error message", your_function_call, *args, **kwargs)

在 unittest.TestCase 类中。这里是the docs for assertRaisesRegexp .

您也可以将这些作为上下文管理器来执行,在这种情况下您不需要将参数分开:

with self.assertRaises(RuntimeError):
    your_function_call(arg1, arg2)

with self.assertRaisesRegexp(RuntimeError, "error message"):
    your_function_call(arg1, arg2)

正如您提到的,这些是针对 Python 2.7 的。对于 Python 3.x,assertRaises 的行为相同,但正则表达式称为 assertRegex(无 p)。

编辑:正如评论中所指出的,这仅在您使用单元测试样式的测试类时才有效。如果您使用的是 py.test,it has its own similar methods you can use .

关于python-2.7 - 检查 Python 2.7 中是否正确引发异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43814495/

相关文章:

java - 为什么当两个值都是 double 时没有 ArithmeticException(除以零)?

c# - 参数超出范围异常

python - 使用 py2 解释器时 PyCharm py3 语法问题

python - 属性错误 : 'module' object has no attribute 'to_rgb'

java - 将异常移出 Function/lambda

javascript - 未捕获异步 javascript 中引发的异常

c# - Mongo DB 连接的正确 C# 异常处理方式

python - 如何在列表中搜索包含三个元素的元组

python - 如何过滤掉嵌套列表中的条件逻辑元素

c# - 如何使用MVC和Ajax格式将错误消息服务器端传递给客户端