当我从代码中的URL解析xml时,出现以下错误。我不会发布XML,因为它很大。链接在下面的代码中。
错误:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-70-77e5e1b79ccc> in <module>()
11
12 for child in root.iter('Materia'):
---> 13 if not child.find('EmentaMateria').text is None:
14 ementa = child.find('EmentaMateria').text
15
AttributeError: 'NoneType' object has no attribute 'text'
我的代码:
url = 'http://legis.senado.leg.br/dadosabertos/senador/4988/autorias'
import requests
from xml.etree import ElementTree
response = requests.get(url, stream=True)
response.raw.decode_content = True
tree = ElementTree.parse(response.raw)
root = tree.getroot()
for child in root.iter('Materia'):
if child.find('EmentaMateria').text is not None:
ementa = child.find('EmentaMateria').text
for child_IdMateria in child.findall('IdentificacaoMateria'):
anoMateria = child_IdMateria.find('AnoMateria').text
materia = child_IdMateria.find('NumeroMateria').text
siglaMateria = child_IdMateria.find('SiglaSubtipoMateria').text
print('Ano = '+anoMateria+' | Numero Materia = '+materia+' | tipo = '+siglaMateria+' | '+ementa)
我在这里俯瞰什么? 谢谢
答案 0 :(得分:5)
您应确保child.find('EmentaMateria').text
不是None
,而不是检查child.find('EmentaMateria')
是否不是None
。
此外,您应该存储child.find('EmentaMateria')
的返回值,以避免调用两次。
最后,如果ementa
为child.find('EmentaMateria')
,则应为None
指定一个默认值;否则,下面的print
函数将引用一个未初始化的变量。
更改:
if child.find('EmentaMateria').text is not None:
ementa = child.find('EmentaMateria').text
收件人:
node = child.find('EmentaMateria')
if node is not None:
ementa = node.text
else:
ementa = None
或者,您可以使用内置函数getattr
来执行相同的操作而无需使用临时变量:
ementa = getattr(child.find('EmentaMateria'), 'text', None)