не могу отсортировать список доменов
Вот метод:
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'