Coding for KidsCoding for Kids
Creatieve LevelsUitdagingenLerarengids
Stem op functies
Gevorderde Python-ontwikkelingscursus
Hoofdstuk
>
Niveau

Foutafhandeling
Een uitzondering afronden

Doelstelling

Ga naar het kantoor en zorg ervoor dat de geldvoorraad correct is uitgebalanceerd door gebruik te maken van het finally codeblok en het assert keyword.

Diep op de tweede verdieping is een kantoor gewijd aan het bewaren van fondsen voor toekomstige investeringen voor de boerderij. Het is hoog tijd om in te checken en te zorgen dat alle boeken kloppen. Bij het omgaan met getallen zijn rekenfouten en andere problemen onvermijdelijk, dus is exception handling opnieuw een goed idee om fouten op te vangen en op te lossen.

Naast try / except en else codeblokken is er ook het finally codeblok dat je in staat stelt een uitzondering af te ronden. Daarnaast is het assert keyword een debugfunctie waarmee je kunt controleren of een stuk code fouten bevat, zodat je slechte code kunt corrigeren.

Begin door naar het lichte X-teken voor de kantoordeur te lopen en gebruik de open() functie om de deur te openen en binnen te komen. Eenmaal binnen loop je naar het gouden X-teken en gebruik je de collect() functie om twee verschillende constanten op te halen, genaamd: categories en savings. De constante categories is een lijst die de geldhoeveelheden bevat van de drie categorieën, namelijk: "exports", "imports", "stock", die geverifieerd moeten worden. De constante savings is een variabele die een geldvoorraad bevat die mogelijk nodig is om te waarborgen dat de kisten voldoende zijn bevoorraad.

Nu alle benodigde items verzameld zijn, is het tijd om de geldvoorraad in de zakken in evenwicht te brengen die door een kantoorbediende verzameld en verdeeld zullen worden nadat je klaar bent. Loop naar het donkere X-teken op het blauwe tapijt, voor de X-tekens op de blauwe, gele en rode tapijten. Hier zullen we de lijstconstante categories gebruiken om te verifiëren dat elke zak alle benodigde componenten bevat voordat deze wordt verzonden.

Elke zak hoort de componenten te bevatten die in de lijst categories staan. Er zijn drie dictionary-constanten die bij elke zak horen: blue_sack, yellow_sack en red_sack. Voer een for-lus uit terwijl je op het X-teken op het blauwe tapijt staat om te verifiëren dat de zak alle benodigde materialen bevat en bevestig vervolgens dat de voorraad is geteld.

for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) player.speak("All assets accounted for")

Sommige zakken bevatten alle benodigde materialen, maar zoals gebruikelijk in deze oefeningen kun je op een fout stuiten. Als je een probleem tegenkomt, moet je de try / except codeblokken gebruiken om de fout op te vangen, in dit geval een KeyError: die optreedt wanneer een dictionary-sleutel niet wordt gevonden. Wanneer dit gebeurt, voegen we ook finally toe aan de uitzondering, die de uitzondering afrondt door code toe te voegen die altijd aan het einde van elke foutafhandeling wordt uitgevoerd. In tegenstelling tot uitzonderingen kan er maar één finally-blok per try zijn. Bijvoorbeeld, in het geval van de blue_sack:

try: for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) except: player.speak("Bag is missing %s, adding now" % (categories[x])) player.place(categories[x]) finally: player.speak("All assets accounted for")

Herhaal dit proces op de donkere X-tekens op de gele en rode tapijten, met behulp van de dictionary-constanten yellow_sack en red_sack. Dit is in sommige gevallen mogelijk niet nodig, aangezien de fout alleen optreedt als er een item ontbreekt in de zakken.

Nu de zakken zijn gecontroleerd, is het tijd om verder te gaan naar de kisten voor de groene, paarse en oranje tapijten. Hier moeten we ervoor zorgen dat de geldvoorraad in elke kist precies 30 is en deze daarna gesloten wordt. Er zijn drie variabele constanten die overeenkomen met elke kist, genaamd: green_chest, purple_chest en orange_chest.

Het grootste probleem bij het controleren van de kisten is dat we hun exacte inhoud niet kennen. Wanneer je met onbekende waarden werkt, kun je het assert keyword gebruiken. Dit keyword stelt je in staat om te verifiëren of een verklaring die je doet waar of onwaar is, wat erg nuttig is om te controleren of je code fouten bevat. Het assert keyword wordt gebruikt in combinatie met try, except, else en finally en hun verschillende combinaties om code met fouten te herstellen. Bijvoorbeeld, in het geval van de green_chest:

try: assert(green_chest = 30) except AssertionError: player.speak("Chest is not full %s/30" % green_chest) drop = 30-green_chest savings -= drop player.place(drop) else: player.speak("All assets accounted for") finally: player.close()

In de bovenstaande code controleren we of de green_chest de juiste hoeveelheid geldvoorraad bevat met behulp van het assert keyword. Als deze niet de juiste hoeveelheid bevat, wordt het except-blok geactiveerd en berekenen we de ontbrekende voorraad, trekken deze af van de savings-variabele en voegen deze toe aan de kist. Als de voorraad compleet is, wordt het else-blok geactiveerd en wordt bevestigd dat alle activa aanwezig zijn. Zodra alles is gecontroleerd, wordt het finally-blok uitgevoerd en wordt de close() functie opgeroepen om de kist te sluiten.

Zet je op de X-tekens op de groene, paarse en oranje tapijten, richt je op de kisten en voer de verificatie uit met behulp van: green_chest, purple_chest, orange_chest op de respectievelijke gekleurde tapijten. Als je klaar bent, loop dan naar het lichte X-teken en gebruik de place() functie om het resterende bedrag van de savings variabele in de krat op te slaan om het level te voltooien.

Codeboek