Ik krijg de fout hieronder als ik de XML van de URL in de Code parseer. Ik zal de XML niet plaatsen omdat het enorm is. De link zit in de onderstaande code.
FOUT:
---------------------------------------------------------------------------
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'
Mijn code:
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)
Wat ik hier overziet?
Bedankt
Antwoord 1, Autoriteit 100%
In plaats van te controleren of child.find('EmentaMateria').text
niet None
is, moet u ervoor zorgen dat child.find('EmentaMateria')
is niet eerst None
.
U moet ook de terugkerende waarde van child.find('EmentaMateria')
opslaan om te voorkomen dat deze twee keer wordt aangeroepen.
Ten slotte moet u ementa
een standaardwaarde toewijzen als child.find('EmentaMateria')
None
is; anders verwijst uw functie print
hieronder naar een niet-geïnitialiseerde variabele.
Wijzigen:
if child.find('EmentaMateria').text is not None:
ementa = child.find('EmentaMateria').text
naar:
node = child.find('EmentaMateria')
if node is not None:
ementa = node.text
else:
ementa = None
Als alternatief kunt u de ingebouwde functie getattr
gebruiken om hetzelfde te doen zonder een tijdelijke variabele:
ementa = getattr(child.find('EmentaMateria'), 'text', None)