Verkkosivujen kaavinta ja botit · Oppitunti

Bottien lokitus ja virheenkäsittely

Rakentakaa vikasietoisia yksinkertaisia botteja lisäämällä rakenteinen lokitus ja hallittu virheenkäsittely, jotta virheet ovat havaittavissa ja korjattavissa.

Oppitunti 4/413 vaihetta

Bottien lokitus ja virheenkäsittely on ilmainen Verkkosivujen kaavinta ja botit-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Verkkosivujen kaavinta ja botit-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Verkkosivujen kaavinta ja botit-kurssilla on yhteensä 4 oppituntia.

Miksi botit tarvitsevat lokit

Botti toimii ilman valvontaa, usein ajastettuna. Kun jokin rikkoutuu, kukaan ei välttämättä seuraa toimintaa. Lokitus jättää jäljen, jonka avulla voit selvittää tapahtuneen jälkikäteen.

Ilman lokeja hiljainen virhe voi jäädä huomaamatta päiviksi.

print() ei ole lokitusta

Aloittelijat käyttävät print()-funktiota, mutta siinä ei ole tasoja tai aikaleimoja eikä helppoa tapaa ohjata tulostetta tiedostoon. Pythonin logging-moduuli ratkaisee kaikki nämä ongelmat.

print('something happened')  # no level, no time, hard to manage

Lokituksen määrittäminen

Määritä lokitus kerran ohjelman käynnistyessä. Aseta aikaleiman ja tason sisältävä muoto ja valitse tulosteen kohde.

import logging

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s %(levelname)s %(message)s'
)
log = logging.getLogger('bot')
log.info('Bot started')

Lokitasot

Lokitasojen avulla voit hallita yksityiskohtaisuutta:

  • DEBUG yksityiskohtainen seuranta.
  • INFO normaali eteneminen.
  • WARNING jotain poikkeavaa, mutta palautettavissa olevaa.
  • ERROR toiminto epäonnistui.
  • CRITICAL botti ei voi jatkaa.
log.debug('fetched 12 rows')
log.warning('retrying after timeout')
log.error('login failed')

Lokitus tiedostoon

Ilman valvontaa toimiville boteille lokit kannattaa kirjoittaa tiedostoon, jotta voit tarkastella niitä myöhemmin. Kiertävä käsittelijä rajoittaa tiedoston kokoa.

from logging.handlers import RotatingFileHandler

handler = RotatingFileHandler('bot.log', maxBytes=1_000_000, backupCount=3)
log.addHandler(handler)

Poikkeusten käsittely

Sijoita riskialttiit operaatiot try/except-rakenteeseen, jotta yksi virhe ei kaada koko suoritusta. Kirjaa virhe kontekstitietoineen.

try:
    submit_form(data)
except Exception as e:
    log.error('form submission failed: %s', e)

Kokonaisten pinolokien kirjaaminen

Käytä log.exception-kutsua except-lohkon sisällä koko pinolokin tallentamiseen. Se on erittäin hyödyllinen virheenkorjauksessa.

try:
    risky()
except Exception:
    log.exception('unexpected error in risky()')

Hetkellisten virheiden uudelleenyritys

Verkkoyhteyden hetkelliset häiriöt ovat yleisiä. Ota ne kiinni ja yritä uudelleen muutaman kerran ennen luovuttamista sekä kirjaa jokainen yritys.

for attempt in range(3):
    try:
        fetch()
        break
    except ConnectionError:
        log.warning('attempt %d failed, retrying', attempt + 1)
else:
    log.error('all attempts failed')

Virheistä ilmoittaminen näkyvästi

Hiljaiset virheet ovat vaarallisia. Vakavien virheiden yhteydessä eskaloi tilanne: lähetä hälytyssähköposti, kirjoita merkkitiedosto tai lopeta nollasta poikkeavalla koodilla, jotta ajastin huomaa ongelman.

import sys
if not data:
    log.critical('no data scraped, aborting')
    sys.exit(1)

Siisti sulkeminen

Vapauta resurssit aina myös virheen sattuessa. finally-lohko tai kontekstinhallitsijat varmistavat, että selaimet suljetaan ja tiedostot tyhjennetään riippumatta siitä, mikä meni vikaan.

try:
    run_bot()
finally:
    driver.quit()
    log.info('bot finished')

Rakenteisen lokituksen konteksti

Liitä jokaiseen lokiriviin kontekstitietoja, kuten nykyinen URL-osoite tai kohteen tunniste, jotta näet pitkää lokia tarkastellessasi heti, mihin tietueeseen viesti liittyy.

log.info('scraped item %s from %s', item_id, url)

Pikatarkistus

Testaa, miten hyvin ymmärrät bottien lokitusta ja virheenkäsittelyä.

Kertaus

Opit tekemään yksinkertaisista boteista vikasietoisia: käyttämään logging-moduulia print-funktion sijaan, valitsemaan sopivat lokitasot, kirjoittamaan lokit kiertyviin tiedostoihin, ottamaan poikkeukset kiinni ja kirjaamaan ne pinolokeineen, yrittämään hetkellisiä virheitä uudelleen, ilmoittamaan kriittisistä ongelmista näkyvästi ja sulkemaan ohjelman siististi.

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Bottien lokitus ja virheenkäsittely” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Verkkosivujen kaavinta ja botit-oppimispolun 3 oppituntia, myös oppitunnin “Bottien lokitus ja virheenkäsittely”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Verkkosivujen kaavinta ja botit-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Bottien lokitus ja virheenkäsittely”?

Rakentakaa vikasietoisia yksinkertaisia botteja lisäämällä rakenteinen lokitus ja hallittu virheenkäsittely, jotta virheet ovat havaittavissa ja korjattavissa. Harjoittelet Verkkosivujen kaavinta ja botit-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Verkkosivujen kaavinta ja botit-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Verkkosivujen kaavinta ja botit-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Bottien lokitus ja virheenkäsittely”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Verkkosivujen kaavinta ja botit-oppitunnilla?

Kyllä. Jokainen Verkkosivujen kaavinta ja botit-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Bottien tavoitteiden määrittäminen
  2. Yksinkertaisten lomakkeiden lähettämisen automatisointi
  3. Perustehtävien ajoittaminen
  4. Bottien lokitus ja virheenkäsittely
← Takaisin: Verkkosivujen kaavinta ja botit