Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Python ohjelma kaatuu is not None ehtolauseeseen

Multibyte [14.01.2018 15:52:21]

#

Moi

Ao. koodi tuntuu kaatuvan seuraavaan kohtaan, jossa tarkistan, että löytyikö tietty HTML-elementti. Ts. jos sen tyyppi ei ole None, niin HTML parsitaan eteenpäin.
Nyt koodi tuntuu toistuvasti kaatuvan tuohon tarkistukseen tai tuohon html.find

#Rivi 54
if html.find('a',attrs={'class':'SearchResult__ProfileLink'})['href'] is not None:
        page = session.get(URL+html.find('a',attrs={'class':'SearchResult__ProfileLink'})['href']).text
    else:
        page = 'not found'

Line 55: TypeError: 'NoneType' object has no attribute '__getitem__'

Yritin lisätä tarkistukset vielä lohkoittain enkä yhdistää and operaattorilla.
Sama ongelma. Käytännössä se tulkitsee, ettei se olekaan None, mutta loputal kuitekin herjaa, ettei Nonella ole tuota getitem attribuuttia.

Metabolix [14.01.2018 17:29:22]

#

Virheestä päätellen jo find palauttaa arvon None, jolloin et voi siitä hakea href-arvoa. Sinun pitää hakea tulos muuttujaan ja tarkastaa se ennen hrefin hakemista.

x = html.find('a', attrs={})
if x is not None and href in x and x["href"] is not None:
  # ...

Multibyte [14.01.2018 18:19:58]

#

Metabolix kirjoitti:

Virheestä päätellen jo find palauttaa arvon None, jolloin et voi siitä hakea href-arvoa. Sinun pitää hakea tulos muuttujaan ja tarkastaa se ennen hrefin hakemista.

x = html.find('a', attrs={})
if x is not None and href in x and x["href"] is not None:
  # ...

Makes sense - täytyy kokeilla

Lisäys: Jep, so far so good eli nyt pelaa, kiitoksia neuvosta :)

Macro [14.01.2018 19:04:53]

#

Tosta tulee todella rumaa jälkeä ja erittäin epäselvä kun pitää mennä syvemmälle puuhun. Täällä oli selkeämpiä ratkaisuja.

Multibyte [14.01.2018 19:22:22]

#

Tietäisitpä vain, että mitä täällä "koodilla" tehdään :D

Itseasiassa tuolle attribuutin kaivamiselle on oma metodi .get(), jota tulisi dokumentaation mukaan käyttää silloin, kun ei ole varma sen olemassaolosta.

Ja täytyy lukaista tuo linkitetty ketju...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta