Coding for KidsCoding for Kids
Kreativa NivåerUtmaningarLärarguide
Rösta på funktioner
Avancerad Pythonutvecklingskurs
Kapitel
>
Nivå

Undantagshantering
Flera undantag

Mål

Samla in och lagra vissa medicinska förnödenheter korrekt i lådor genom att använda flera undantag.

Lagerlokalerna på taket behöver fyllas på; några av förnödenheterna har använts men ersatts aldrig. Det finns en order på mer material i ett memo i ett av förråden, så det vore en bra idé att få det ordnat. Med det sagt finns det en mängd olika material som måste sammanställas och lagras i lådor.

På grund av de olika datatyperna och mängden material som behövs för att fylla lådorna kan vi stöta på olika fel. Vi kan använda try / except för att fånga eventuella fel och åtgärda vissa problem, men vad händer när det finns flera möjliga fel att stöta på vid en och samma operation? För att hantera detta kan vi specificera vilka undantag vi försöker fånga och använda flera undantag.

Börja med att gå till den gyllene X-markeringen och rikta dig mot dörren. Använd funktionen open() för att komma in i förrådet. När du är inne, gå till den mörka X-markeringen och sväng åt höger för att använda funktionen read() och kontrollera vilka material och mängder som beställs i memot på bordet. Information om listkonstanter finns skriven i memot, inklusive förnödenheter och deras beställningar. När du är klar, gå till den ljusa X-markeringen inne i förrådet, sväng mot lådan och hämta materiallistkonstanten pads med funktionen collect(), på följande sätt: player.collect(pads) .

Inne i förrådet finns lagringar av "peroxide" och "isopropyl", gå och samla in alla och bege dig sedan ut och gå mot den mörka X-markeringen över en lila matta. På den lila mattan, medan du är vänd mot lådan, använd funktionen collect() för att hämta "water bottle", fortsätt till den mörka X-markeringen över den gula mattan och använd funktionen collect() för att hämta "glass bottle".

Nu när föremålen har samlats in är det dags att uppfylla beställningen och placera alla material i förrådets lådor till höger. För att göra detta kommer vi först att lagra: "water bottle", "peroxide" och "isopropyl" i en lista med namnet supplies. Vid de mörka X-markeringarna över de red, green och blue mattorna kommer vi att använda lådorna för att förvara de medicinska förnödenheterna. För detta sätter vi upp tre listor: blue_crate = [], green_crate = [] och red_crate = [].

Innan vi placerar alla föremål måste vi fylla listorna med materialen, och för detta kommer vi att använda en loop för att iterera igenom listorna och kombinera dem till en enda lista. Detta kommer att lägga alla supplies i listan och dela antalet pads-objekt enligt order i memot i förrådet.

for x in range(5): blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x])

Trots detta kommer du att märka att fel uppstår, även om allt görs korrekt och koden är solid. Problemet är att listan supplies bara innehåller tre (3) objekt, men loopen körs fem (5) gånger vilket orsakar ett Index Error. Samtidigt har listan pads inte bara tre (3) objekt utan även ett av beställningsvärdena är 0, vilket medför att varje tal delat med 0 orsakar ett Zero Division Error eftersom inget tal kan delas med 0 i matematiken.

Det är här flera undantag är användbara; vi använder try / except-kodblock för att fånga felen och låta oss fortsätta med koden. Eftersom det uppstår två fel måste vi identifiera varje fel för att kunna fånga de specifika undantagen. Detta görs genom att utvidga except-kodblocken på följande sätt: except IndexError: och except ZeroDivisionError:. Till exempel:

for x in range(5): try: blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x]) except IndexError: blue_crate.append("glass bottle") except ZeroDivisionError: blue_crate.append(0)

Index Error åtgärdas genom att fylla på de saknade platserna i listan med "glass bottle", och Zero Division Error hanteras genom att lägga till ett värde av 0 om den otillåtna operationen inträffar.

Gör detta för listorna blue_crate = [], green_crate = [] och red_crate = []. Gå till den mörka X-markeringen över de blue, green och red mattorna och använd funktionen place() för att lagra listorna i de motsvarande lådorna för att slutföra nivån.

Kodbok