Из Python 3 docs :
Этот метод сортирует список на месте, используя только & lt; сравнение между элементами. Исключения не подавляются - если какие-либо операции сравнения не выполняются, вся операция сортировки завершится неудачно (и список, вероятно, останется в частично измененном состоянии).
blockquote>Документы не гарантируют никаких в частности, но элементы, скорее всего, будут оставлены на частичной сортировке. Порядок сортировки, в котором они находились, когда произошло исключение, и этот порядок может варьироваться в зависимости от реализации или, возможно, (но маловероятно) двух последующих прогонов программы.
Если вы хотите попытаться отсортировать элементы, не беспокоясь о них неудачный переупорядочивание, вы можете использовать встроенную функцию
sorted
, которая вернет новый список, а не изменит оригинал.>>> seq = ['b', 'a', 3, 'd', 'c'] >>> try: ... seq = sorted(seq) # if sorted fails, result won't be assigned ... except Exception: # you may only want TypeError ... pass ... >>> seq ['b', 'a', 3, 'd', 'c'] # list unmodified
EDIT: чтобы все говорили, говоря что-то вроде
после того, как он видит два разных типа, он вызывает исключение
blockquote>Я знаю, что вы, вероятно, знаете, что этот вид заявления является упрощение, но я думаю, что, не будучи ясным, это вызовет путаницу.
Следующий пример состоит из двух классов
A
иB
, которые поддерживают сравнение друг с другом через их соответствующие методы__lt__
. Он отображает список, смешанный из этих двух типов, отсортированный поlist.sort()
, а затем напечатанный в отсортированном порядке без каких-либо исключений:class A: def __init__(self, value): self.a = value def __lt__(self, other): if isinstance(other, B): return self.a < other.b else: return self.a < other.a def __repr__(self): return repr(self.a) class B: def __init__(self, value): self.b = value def __lt__(self, other): if isinstance(other, A): return self.b < other.a else: return self.b < other.b def __repr__(self): return repr(self.b) seq = [A(10), B(2), A(8), B(16), B(9)] seq.sort() print(seq)
. Вывод этого:
[2, 8, 9, 10, 16]
Не важно, чтобы вы понимали каждую деталь этого. Просто проиллюстрировать, что список смешанных типов может работать с
list.sort()
, если все части есть