在Python中检查lambda中的断言
我正在尝试使用断言来展示一些不变性(主要是在测试中)。所以我想写一些像下面这样的代码:
values = [ range(10) ]
expected_values = [ range(10) ]
map (lambda x: assert x[0] == x[1] ,zip( [ run_function(i) for i in values ], expected_values))
如果我用unittest.assertEqual来做,这个方法运行得很好,但如果我想用断言来写,它就失败了。有没有办法解决这个问题呢?
5 个回答
7
其实你可以这样做:
assertion_raiser = lambda: (_ for _ in ()).throw(AssertionError("My Lambda CAN raise an assertion!"))
这里有一些验证的代码:
try:
assertion_raiser()
except AssertionError:
print("assertion caught")
13
12
很遗憾,assert
是一种语句,而Python的lambda表达式功能有限,不允许在里面使用这种语句。它们也限制了一些其他的功能,比如print
。
不过,你可以在这里使用生成器表达式。
assert all(x[0] == x[1] for x in zip( [run_function(i) for i in values ], expected_values))
我个人觉得下面的写法会更容易理解。
assert all(run_function(i) == j for i,j in zip(inputs, expected_values))