我正在写一个单元测试,其中的一个检查返回包含子列表[[],[],[]]
列表的方法,子列表的顺序并不重要,只有子列表和它们的值的数量,问题是,TestCase.assertItemsEqual()
已被弃用,没有TestCase.assertElementsEqual()
方法。为了解决这个问题,我决定对从方法返回的列表和我的单元测试中的列表进行排序,并比较排序的版本,但问题是子列表总是有一个None值并且排序会产生错误:排序键=并不适用于子表
>>> sorted([ [None], [1,2] ])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < NoneType()
其实我的子列表总是有8个值,其中一个是无,我有2至4子表。
所以,我写了一个小的λ改变一个无为0,因为排序并不在所有问题,我只需要保证的顺序是一样的:
>>> (lambda x: x if x is not None else 0)(None)
0
>>> (lambda x: x if x is not None else 0)(1)
1
但事实并非如此工作,
>>> sorted([ [None], [1,2] ], key = lambda x: x if x is not None else 0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < NoneType()
错误消息误导我认为,改变NoneType到IntType上会解决,但我知道,在lambda x值是子列表中的一个,这就是为什么在lambda是行不通的。但我不知道如何解决它。