Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 7, 2012 14:32:14

Freest
Зарегистрирован: 2012-11-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Импорт lxml при запуске из IDE и из консоли

Добрый день.
В 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

Помогите понять, плз, как бороться, куда рыть.

Офлайн

#2 Ноя. 7, 2012 14:42:16

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Импорт lxml при запуске из IDE и из консоли

УМВР.

Freest
lxml.etree.c:179662
Эт че за наркоманство?

Офлайн

#3 Ноя. 7, 2012 15:11:07

Freest
Зарегистрирован: 2012-11-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Импорт lxml при запуске из IDE и из консоли

odnochlen
Эт че за наркоманство?
Если честно, я вообще не понимаю, куда ссылается эта строка.

Офлайн

#4 Ноя. 7, 2012 16:05:02

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Импорт lxml при запуске из IDE и из консоли

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. И да, УМВР

Отредактировано s0rg (Ноя. 7, 2012 16:07:29)

Офлайн

#5 Ноя. 7, 2012 17:08:09

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Импорт lxml при запуске из IDE и из консоли

Freest
src/lxml/lxml.etree.c:179662
Я имею в виду - это что, 179662-я строка??

Отредактировано odnochlen (Ноя. 7, 2012 17:08:36)

Офлайн

#6 Ноя. 7, 2012 17:34:52

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Импорт lxml при запуске из IDE и из консоли

odnochlen
Я имею в виду - это что, 179662-я строка??
Да это Cython нагенерировал из lxml.etree.pyx (там 3,2к )

Офлайн

#7 Ноя. 7, 2012 18:50:00

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Импорт lxml при запуске из IDE и из консоли

Не наркоманство ли? 3,2 к в оригинальном исходнике?

Офлайн

#8 Ноя. 8, 2012 11:57:05

Freest
Зарегистрирован: 2012-11-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Импорт lxml при запуске из IDE и из консоли

Действительно, с кодировками что-то непонятное у меня в системе (
sys.getdefaultencoding()
В эклипсе возвращает ‘utf-8’, а в консоли ‘ascii’
lxml, оказывается, прекрасно цепляется под рутом, под моим юзером вылетает эта ошибка, но если ввести команду импорта повторно - цепляется и работает.. Мистика..

Т.к. скрипт написан для личных нужд и запускается на личном ноуте, решил не заморачиваться и запускать его sudo.

Но при работе скрипта из консоли начала вываливаться ошибка кодека на кириллические символы (видимо, из-за sys.getdefaultencoding() ‘ascii’ ) Решил это:

reload(sys)
sys.setdefaultencoding('utf-8')

Переименую скрипт в “SkladKostiley.py”, всем спасибо!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version