忽略XML属性(如果不存在)的Python方法

时间:2019-11-10 18:57:59

标签: python xml

我正在处理来自API的一些XML,但是XML的结构并不像我想象的那样。我一直在努力忽略属性文本何时不存在。

我正在遍历我的树,获取每个文本并将其分配给变量,例如:

codigo = produtos.find('sku').text
pais = produtos.find('attributes/country').text

以此类推。

但是,在某些情况下,子属性不存在。我试图做内联临时表达式,只是给变量赋一个空白值,但是无论我做什么我都会得到一个'NoneType' object has no attribute 'text'

对于佩斯来说,有时这个孩子不存在,所以我尝试这样做:

pais = produtos.find('attributes/country').text if produtos.find('attributes/country').text else ''

如果我删除了.text调用,那么当属性存在时它将不会检索文本。

与我整体上所做的事情相比,这似乎很简单,但是我无法解决这个问题。当属性不存在时,有没有办法忽略这些内联?

1 个答案:

答案 0 :(得分:0)

经过大量搜索后,我发现最内联的方式是抑制AttributeError(Python 3):

from contextlib import suppress

with suppress(AttributeError): pais = produtos.find('attributes/country').text