LINUX.ORG.RU
Форум — Talks  

Засада от XML

 , ,


0

4

Поставил в однострочнике, разгребающем HTML, простую последовательность: sn = root.xpath(...); sn = sn[0] if sn else None; print(sn[0].text if sn else '') Работает. Но если поиск xpath что-то находит, получаю предупреждение:

FutureWarning: Truth-testing of elements was a source of confusion and will always return True in future versions. Use specific ‘len(elem)’ or ‘elem is not None’ test instead.

Полчаса гугления дали ответ. Для Python 3.13 и lxml 6.1.1 выражение 1 if sn else 0 вернёт 0, если sn существует, НО НЕ ИМЕЕТ ДЕТЕЙ. Спасибо, что вставили предупреждение.

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

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

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

Где там утиная типизация? Это скорее приведение типов.

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

уриная типизация

по факту же нарушение алгербы нагружением ложнозначимостью не очевидный мимокрокодилам случай(даже если оно было так_ннада)

qulinxao3 ★☆
()

Это следствие lxml или в целом синтаксиса питона касается?

Вообще xml не люблю, отказываюсь от него где только могу. Чего и вам советую.

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

Это следствие lxml или в целом синтаксиса питона касается?

Имхо, попытка совместить соглашения Питона, унаследованные из Си, со сложившимися практиками libxml2.

Вообще xml не люблю, отказываюсь от него где только могу. Чего и вам советую.

Другого нормального формата для электронных книг с оглавлением и сносками нет. Или HTML, или FB2, или Ebook — все парсятся библиотеками для XML.

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

сверх ияишница речёт что до +-5 версии lxml включительно было бездетность как неочевидность значения бульносности типо ща 6 версия копейками и дакой барсучьей на гольфполе норы теперяча нет

ваще это буквально был специализированный охпи

qulinxao3 ★☆
()

вроде универсальней и меметичней - но может токсично в адресс популяции питоно–пограммистов:

sn=next(iter(sn),None) #  не копенганен в сортах лишней ли iter
qulinxao3 ★☆
()
Ответ на: комментарий от qulinxao3

ща 6 версия копейками и дакой барсучьей на гольфполе норы теперяча нет

На 6.1.1 всё ещё есть.

охпи

Что?

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

api была так же крива как и измышления xml (забавно что sgml был более технологичен )

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

sn=next(iter(sn),None)

>>> next(iter(sn), None) is sn[0]
True
>>> next(iter([]), None) is None
True

Работает, спасибо.

Не уверен, что буду пользоваться приёмом, который для меня настолько неочевиден, но всё равно спасибо.

question4 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему: только для зарегистрированных, score>=50.