Bottien lokitus ja virheenkäsittely
Rakentakaa vikasietoisia yksinkertaisia botteja lisäämällä rakenteinen lokitus ja hallittu virheenkäsittely, jotta virheet ovat havaittavissa ja korjattavissa.
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 manageLokituksen 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:
DEBUGyksityiskohtainen seuranta.INFOnormaali eteneminen.WARNINGjotain poikkeavaa, mutta palautettavissa olevaa.ERRORtoiminto epäonnistui.CRITICALbotti 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.
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
- Bottien tavoitteiden määrittäminen
- Yksinkertaisten lomakkeiden lähettämisen automatisointi
- Perustehtävien ajoittaminen
- Bottien lokitus ja virheenkäsittely