【发布时间】:2011-08-07 11:04:18
【问题描述】:
我正在编写一个单元测试,其中一个检查返回包含子列表[[],[],[]] 的列表的方法,子列表的顺序与子列表的数量及其值无关,问题是@ 987654322@ 已弃用,并且没有 TestCase.assertElementsEqual() 方法。为了解决这个问题,我决定对方法返回的列表和单元测试中的列表进行排序,并比较排序后的版本,但问题是子列表总是有一个 None 值并且排序会引发错误:
>>> sorted( [ [None], [1,2] ] )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < NoneType()
实际上我的子列表总是有 8 个值,其中一个是 None,我有 2 到 4 个子列表。
所以,我写了一个小 lambda,将 None 更改为 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 不起作用的原因。但我不知道如何解决它。
【问题讨论】:
标签: python sorting python-3.x