не могу отсортировать список доменов

Вот метод:

result.sort()

Вот список доменов:

['banner.rbc.ru', 'www.rbc.ru', 'www.rbcnews.com', 'pda.rbc.ru', 'rss.rbc.ru', 'memori.ru', 'www.pochta.ru', 'marketing.rbc.ru', 'ulov-umov.ru', 'redir.rbc.ru', 
'pogoda.rbc.ru', 'www.informer.ru', 'tv.rbc.ru', 'rating.rbc.ru', 'realty.rbc.ru', 'www.m-2.ru', 'seminar.rbc.ru', 'www.turist.ru', 'style.rbc.ru', 'www.top.rbc.
ru', 'top.rbc.ru', 'sport.rbc.ru', 'www.rbctv.ru', 'blogi.rbc.ru', 'spb.rbc.ru', 'ug.rbc.ru', 'www.rbc.ua', 'www.quote.ru', 'stock.rbc.ru', 'consensus.rbc.ru', '
credit.rbc.ru', 'quote.ru', 'export.rbc.ru', 'conv.rbc.ru', 'www.biztorg.ru', 'biztorg.ru', 'biztorg.ru:80', 'www.rbcdaily.ru', 'magazine.rbc.ru', 'www.nashideng
i.ru', 'www.autonews.ru', 'www.salon.ru', 'www.ivd.ru', 'turbo.ru', 'raiting.rbc.ru', 'static.feed.rbc.ru', 'www.utro.ru', 'data.rbc.ru', 'www.armd.ru', 'www.sem
inar.rbc.ru', 'www.event.rbc.ru', 'www.conf.rbc.ru', 'finolymp.ru', 'videoarchive.rbc.ru', 'otc-stock.rbc.ru', 'quote-otc.rbc.ru', 'otc-pif.rbc.ru', 'www.refunde
r.ru', 'graph.rbc.ru', 'portfolio.rbc.ru', 'map.rbc.ru', 'ta.rbc.ru', 'www.quotetotal.ru', 'www.quoterate.ru', 'www.cnews.ru', 'cnews.ru', b'', 'events.cnews.ru'
, 'zoom.cnews.ru', 'gift.cnews.ru', 'www.turbo.ru', 'www.worldclass.ru', 'drinktime.ru', 'tata.ru', 'adworker.ru', 'www.5ballov.ru', 'www.iglobe.ru', 'dict.rbc.r
u', 'www.rbcinfosystems.com', 'top100.rambler.ru', 'www.liveinternet.ru']

Когда пытаюсь отсортировать список выдает ошибку:

Traceback (most recent call last):
  File "E:\projects\project_2.py", line 33, in <module>
    result.sort()
TypeError: '<' not supported between instances of 'bytes' and 'str'

Не понимаю как преодолеть эту ошибку


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

В списке result среди строк есть массив байт: b''. Python строго следит чтобы эти два типа не смешивались в операциях. "Плохое" значение можно удалить из списка или преобразовать в строку.

На будущее держите процедуру которая, показывает какие именно значения не удалось сравнить:

import functools


...


def cmp_(a, b):
    try:
        if a < b:
            return -1
        if a > b:
            return 1
        if a == b:
            return 0
    except:
        assert False, f'incomparable {repr(a)} {repr(b)}'

    assert False, f'incomparable {repr(a)} {repr(b)}'


result.sort(key=functools.cmp_to_key(cmp_))
print(lst)
$ python sort_error.py
Traceback (most recent call last):
  File "/home/sv/desk/stackoverflow/temp.py", line 30, in cmp_
    if a < b:
TypeError: '<' not supported between instances of 'bytes' and 'str'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/sv/desk/stackoverflow/temp.py", line 42, in <module>
    lst.sort(key=functools.cmp_to_key(cmp_))
  File "/home/sv/desk/stackoverflow/temp.py", line 37, in cmp_
    assert False, f'incomparable {repr(a)} {repr(b)}'
AssertionError: incomparable b'' 'turbo.ru'
→ Ссылка