Freest
Ноя. 7, 2012 14:32:14
Добрый день.
В Eclipse + PyDev написал небольшой скрипт, использующий lxml. Сам импорт модуля выполняется так:
from lxml import etree
В эклипсе все прекрасно отрабатывает, но стоит попробовать выполнить эту строку в интерпретаторе в консоли - вываливается с ошибкой:
Python 2.7.3 (default, Oct 12 2012, 16:19:39)
on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>> from lxml import etree
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
File “lxml.etree.pyx”, line 134, in init lxml.etree (src/lxml/lxml.etree.c:179662)
TypeError: encode() argument 1 must be string without null bytes, not unicode
Помогите понять, плз, как бороться, куда рыть.
Freest
Ноя. 7, 2012 15:11:07
odnochlen
Эт че за наркоманство?
Если честно, я вообще не понимаю, куда ссылается эта строка.
s0rg
Ноя. 7, 2012 16:05:02
Freest
Если честно, я вообще не понимаю, куда ссылается эта строка.
А надо бы…
Эта строка ссылается на С-шный сорс, но не в нем дело, обратите внимание на то,
откуда он вызывается:
Freest
File “lxml.etree.pyx”, line 134
Гугл -> lxml.etree.pyx попадаем
сюда.
Смотрим на 134 строку:
cdef bytes _FILENAME_ENCODING = (sys.getfilesystemencoding() or sys.getdefaultencoding() or 'ascii').encode(u"UTF-8")
Итого имеем проблемы с разностью локалей при запуске в эклипсе и консоли.
P.S. И да, УМВР
odnochlen
Ноя. 7, 2012 17:08:09
Freest
src/lxml/lxml.etree.c:179662
Я имею в виду - это что, 179662-я строка??
reclosedev
Ноя. 7, 2012 17:34:52
odnochlen
Я имею в виду - это что, 179662-я строка??
Да это Cython нагенерировал из lxml.etree.pyx (там 3,2к

)
odnochlen
Ноя. 7, 2012 18:50:00
Не наркоманство ли? 3,2 к в оригинальном исходнике?
Freest
Ноя. 8, 2012 11:57:05
Действительно, с кодировками что-то непонятное у меня в системе (
sys.getdefaultencoding()
В эклипсе возвращает ‘utf-8’, а в консоли ‘ascii’
lxml, оказывается, прекрасно цепляется под рутом, под моим юзером вылетает эта ошибка, но если ввести команду импорта повторно - цепляется и работает.. Мистика..
Т.к. скрипт написан для личных нужд и запускается на личном ноуте, решил не заморачиваться и запускать его sudo.
Но при работе скрипта из консоли начала вываливаться ошибка кодека на кириллические символы (видимо, из-за sys.getdefaultencoding() ‘ascii’ ) Решил это:
reload(sys)
sys.setdefaultencoding('utf-8')
Переименую скрипт в “SkladKostiley.py”, всем спасибо!