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

Python 2.7 检查Python 2.7中是否正确引发了异常?,python-2.7,exception,exception-handling,python-unittest,Python 2.7,Exception,Exception Handling,Python Unittest,有人知道如何检查异常是否正确引发吗 我需要一些在Python2.7中工作的东西。下面的“assert”不是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

有人知道如何检查异常是否正确引发吗

我需要一些在Python2.7中工作的东西。下面的“assert”不是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类中。看

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

self.assertRaisesRegexp(RuntimeError, "error message", your_function_call, *args, **kwargs)
在unittest.TestCase类中。给你

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

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

with self.assertRaisesRegexp(RuntimeError, "error message"):
    your_function_call(arg1, arg2)
正如您所提到的,这些是针对Python2.7的。对于Python3.x,
assertRaises
的行为相同,但是正则表达式一被称为
assertRegex
(no
p


编辑:正如注释中指出的,这仅在使用unittest样式的测试类时有效。如果您使用的是py.test,.

谢谢,bouteillebleu!我这样做了:self.assertRaises(RuntimeError,a_a0.add_instance(“A00”,b_a0))……但我仍然得到了与问题陈述中前面提到的相同的错误。还尝试了“self.assertRaisesRegexp(RuntimeError,“无法将实例名为“A00”的重复实例添加到模块“a_a0”,a_a0.add_instance(“A00”,b_a0))”错误:回溯(most…last):文件“test_010_module.py”,在runTest self.assertRaisesRegexp(RuntimeError,“无法将实例名为“A00”的重复实例添加到模块“A_A0”中的第157行,A_A0.添加_实例(“A00”,b_A0))文件“xxx”,在添加_实例返回_ISC.SharedModule_添加_实例(self,name,module)RuntimeError:无法将实例名为“A00”的重复实例添加到模块“A_A0Ah”,我已重新阅读了2.7文档,其中的语法似乎与3.x不同-我将更正我的答案!您必须将参数与函数分开传递,看起来是这样的。我又看了一遍,这是我的错误-如果您只是将
self.assertRaises()
self.assertRaisesRegexp()
作为一条语句运行,则必须单独传递参数。但是,如果将
一起使用,将其作为上下文管理器,则可以像通常那样调用该函数。编辑答案以更正此问题!这些变化带来的好运吗?