Форум сайта python.su
32
FishHookА если библиотек не хватает то можно вызывать из через Py2, для малых приложений - костыль, для больших - норма.
Обратное тоже верно. Кому хватает библиотек переписанных на тройку, можно наботать и на ней
Офлайн
857
o7412369815963чего ?
меня одно напрягает - как сделан уникод в py3, в py2 с кодировками гибче
Офлайн
1
o7412369815963
Можешь рассказать подробнее про запуск библиотек от Python 2 на python 3.
Офлайн
32
py.user.nextпо большей части он стал правильней, но для примера “понижения гибкости” - пропала возможность дважды декодировать b''.decode().decode(), вообще негатив про кодировки можно почитать в блоге у Армина Роначера http://lucumr.pocoo.org/.
чего ?
wmnpyafnНу тут все просто, запускаем параллельный процесс на py2 и управляем им через celery, xmlrpc, zmq…
Можешь рассказать подробнее про запуск библиотек от Python 2 на python 3.
Офлайн
857
o7412369815963его статья
вообще негатив про кодировки можно почитать в блоге у Армина Роначера
That might not seem like a big deal at first, but APIs have the attitude of spreading further. For instance opening a file will set the name attribute to a “string” of that type:если бы он ошибки нашёл, а то фичу описывает как чуть ли не баг>>> open(b'/tmp/test/Schei\xc3\x9f_Encoding').name b'/tmp/test/Schei\xc3\x9f_Encoding'
As a result every user of the .name attribute will have to force it to the right type before interacting with it. The same thing also has been true on 2.x, however on 3.x this behavior is mostly undocumented.
Python 3 unfortunately made a choice of guessing a little bit too much with unicode in some places. When I asked the question at one conference before about what people believe the default encoding for text files on Python 3 was, most were replying UTF-8. This is correct on some operating systems. It's definitely true for OS X and it's true for most linux distributions I tried. However how does Python determine that encoding? The answer is by looking into the locale settings in the environment variables.просто высосано из пальца
>>> letter = '\N{LATIN CAPITAL LETTER U WITH DIAERESIS}'.encode('latin1') >>> decoded_letter = letter.decode('utf-8', 'surrogateescape') >>> decoded_letter '\udcdc' >>> decoded_letter.encode('utf-8') Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeEncodeError: 'utf-8' codec can't encode character '\udcdc' in position 0: surrogates not allowed
>>> decoded_letter.encode('utf-8', 'surrogateescape') b'\xdc' >>>
This primarily means that you have two options: change all your encode() errorhandling anywhere in your codebase from ‘strict’ (which is the default) to ‘surrogateescape’ or remove surrogates from your strings.так эти суррогаты не ожидаются, почему они должны незаметно кодироваться
o7412369815963а где это нужно ?
пропала возможность дважды декодироватьb''.decode().decode()
Офлайн
26
o7412369815963После первого decode ты получаешь массив символов юникода. Зачем, как и, главное, во что его декодировать?
пропала возможность дважды декодировать b''.decode().decode()
There should be one-- and preferably only one --obvious way to do it.
Офлайн
32
py.user.nextСкорее эта
его статья
Офлайн
32
С кодировками в py3 мне больше нравиться это
>>> b'123' == u'123'в py2 результат будет “обратный”
False
>>> b'123' + u'123'
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
TypeError: can't concat bytes to str
Офлайн
857
o7412369815963
Скорее эта
вот пример там для второго питона показан, когда откуда-то берётся ascii>>> '\xe2\x98\x83'.encode('utf-8') Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128) >>>
o7412369815963
в py3 print “принимает” только строки
o7412369815963у них различается концепция:
в py2 результат будет “обратный”
>>> list(b'abc') [97, 98, 99] >>>
>>> list(b'abc') ['a', 'b', 'c'] >>> b'abc'[0][0][0] 'a' >>>
Отредактировано py.user.next (Июль 7, 2013 05:35:25)
Офлайн
0
пока на 2-й ветке из-за библиотек, но сильно не напрягаюсь по этому поводу
Офлайн