LINUX.ORG.RU

шестой год попыток python3, вечная тема байтов и строк

 


0

3

в n-ный раз пытаюсь портировать хоть самые простые вещи на python3, и снова попадаю на байты и строки

в python2 было всё просто и понятно, есть str, есть unicode, и str всегда совместима с unicode

в python3 даже самый простейший код у меня нарывается на неприятности

в python2 был вот такой код:

def hsh(s):
    out = base64.urlsafe_b64encode(hashlib.sha256(s).digest())
    return out.replace('-', '').replace('_', '')[:8].ljust(8,'A')

всё работало отлично. в python3 же он говорит следующее:

  File "/today/51t/sx.py", line 12, in hsh
    out = base64.urlsafe_b64encode(hashlib.sha256(s).digest())
TypeError: Unicode-objects must be encoded before hashing

окей, байтуем, заменяем s на s.encode('utf-8'). получаем:

  File "/today/51t/sx.py", line 9, in hsh
    return out.replace('-', '').replace('_', '')[:8].ljust(8,'A')
TypeError: a bytes-like object is required, not 'str'

ну да, у нас теперь байтовая строка, а по слухам в третьем python они уже несовместимы. делаем out=str(out) или out=out.decode('utf-8'), без разницы... и получаем в итоге:

Traceback (most recent call last):
  File "run.py", line 3, in <module>
    import os, appw
  File "/today/51t/appw.py", line 60, in <module>
    appz[x]=parse_dir(x)
  File "/today/51t/appw.py", line 44, in parse_dir
    append_hashes(rootdir,n,subdir)
  File "/today/51t/appw.py", line 25, in append_hashes
    hashlist[dp+n] = hsh( open(dp + n).read() )
  File "/usr/local/lib/python3.6/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte

у меня нет даже малейшего представления о том, что этой шарманке надо. походу, ближайшие лет 20 python3 лучше не трогать :), а там и новый, более вменяемый, выйдет :)

★★★★★
Ответ на: комментарий от anonymous

Не спорь. Systemd с передергиванием кривых падучих демрнов и жабоскрипт с «всё есть прототип объекта, и пофигу, какой прототип какого объекта» победили. Я удивлен, что теги таки закрывают.

Shadow ★★★★★
()
Ответ на: комментарий от no-such-file

нормально записывать лямбды

Я думал, любителей однострочников на перле методично душили последние 20 лет, а остальным хватает self.
Но иногда не хватает анонимных функций, это верно. Другое дело, что, как я понимаю, компилятору без разницы.

Shadow ★★★★★
()
Ответ на: комментарий от yyk

и при чём файловые системы к дурацким ограничениям в питоне?

Нефиг разводить бардак и писать куда попало. Там другим потом читать.

anonymous
()
Ответ на: комментарий от anonymous

нет, скорее день открытых дверей в школе прапоров от IT

ладно, хочешь сам ходить строем - ходи

но навязывать другим - ни-ни

посему ограничения в питоне - дурацкие

yyk ★★★★★
()
Ответ на: комментарий от anonymous

а питон 2 закопайте уже.

К сожалению, в ряде случаев проще закопать Python3.

bookman900 ★★★★★
()
Ответ на: комментарий от yyk

но навязывать другим - ни-ни

Тебе никто не ничего навязывает, говнокодь хоть на жабоскрипте.

Тебе объясняют, что поведение «не заставляйте меня писать читаемый код, я хочу говнокодить» вредит твоим коллегам.

anonymous
()
Ответ на: комментарий от yyk

многострочные лямбды - говнокод?

Конечно говнокод, это какая-та ленивая жопа заленилась сделать нормальную функцию с нормальным именем.

Я же говорю, нет бога кроме Аллаха!

Тебе веднее.

anonymous
()
Ответ на: комментарий от anonymous

Конечно говнокод

вот и я про то: всем достаточно однострочных лямбд, 640к и про Аллаха заодно...

yyk ★★★★★
()
Ответ на: комментарий от yyk

вот и я про то: всем достаточно однострочных лямбд, 640к и про Аллаха заодно...

Смешались в кучу люди, кони. Почему-то любители мешать разные функции друг в друга и в разговоре всё мешают.

Кроме однострочных лямбд в питоне есть нормальные функции, методы классов и даже сраный __call__. Да, этого всем достаточно.

Не согласен - давай примеры, а не заливай мне тут про Аллаха.

anonymous
()
Ответ на: комментарий от anonymous

Да, этого всем достаточно.

Сначала всем было достаточно машкодов. Потом ассемблера. Вот теперь докатились до однострочных лямбд в питоне.

окаменелости - они такие, скорее рассыплются в прах, чем изменяться

Не согласен - давай примеры

пиши уж сразу на машкодах

yyk ★★★★★
()
Последнее исправление: yyk (всего исправлений: 1)
Ответ на: комментарий от yyk

Охлол, тебе даже свободы машинных кодов не хватает, где ты можешь писать любую пересь, которую твой процессор вообще может выполнить? Или ты просто не понимаешь, о чем говоришь? Может ты таки действительно жабоскриптер?

anonymous
()
Ответ на: комментарий от anonymous

Охлол, тебе даже свободы машинных кодов не хватает, где ты можешь писать любую пересь, которую твой процессор вообще может выполнить?

Ты явно перегрелся от умственного напряжения, расслабься. Прекращаю диалог с тобой из-за опасений за твоё здоровье (но ты можешь считать что я слился, если это поможет твоему здоровью).

yyk ★★★★★
()
Ответ на: комментарий от yyk

Ах как красиво ушел. Вякнул хрень, примеров не дал, обвинил оппонента. Хоть слив засчитать разрешил.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.