Python self.assertRaises



我有一个小代码如下,请帮助我如何以正确的方式编写。我想检查value中是否存在ID,如果不存在,则会引发异常。

value = ({'av' : '123', 'user' : 'abc', 'version' : 'xyz'})
with self.assertRaises(IndexError, value[0]["ID"]):
print "not an error"

代码的问题是value[0]["ID"]只是一个任意参数,在Python中,参数在执行函数调用之前进行求值。所以在您的情况下,assertRaises没有机会拦截错误,因为它没有被调用。

如果你想坚持基于上下文管理器的方法,我想你正在寻找这个片段,这在你需要同时评估语句或多个表达式的情况下很有用:

with self.assertRaises(IndexError):
value[0]["ID"]

或者,如果您需要解析单个表达式(语句在lambdas中不起作用),也可以使用这种方式:

self.assertRaises(IndexError, lambda: value[0]["ID"])

有关这方面的更多信息,请看一下这个问题,因为它似乎解决了您关于如何正确使用assertRaises的问题。

此外,请注意,在您的情况下,value只是dict,而不是元组,尽管有括号——为了使value成为单元素元组,请使用foo = (bar, )语法——需要尾部昏迷来区分优先级覆盖括号,如(2 + 2) * 3

此外,在单元测试中,您通常不需要输出任何与断言状态相关的内容——如果它通过或失败,则由单元测试框架来形成适当的报告。但是,如果您无论如何都愿意打印它,只需在断言之后包含print()——因为如果断言失败,测试将停止运行,控制将无法到达print()

如果您不坚持使用assertRaises方法,我宁愿选择assertIn:

value = ({'av' : '123', 'user' : 'abc', 'version' : 'xyz'})
self.assertIn('ID', value)

相关内容

  • 没有找到相关文章

最新更新