Coding for KidsCoding for Kids
Креативні РівніВикликиПосібник для Вчителів
Голосувати за функції
Поглиблений курс розробки на Python
Розділ
>
Рівень

Обробка виключень
Користувацькі винятки

Мета

Використовуй власні винятки для збирання повідомлень з замовленнями продукції та відправлення їх голубом-пересильником.

Деякі повідомлення надсилаються по фермі та інших станціях за допомогою голуба-поштаря, тому було б гарно відправити декілька, щоб випередити графік. Раніше ми ловили помилки, використовуючи стандартні винятки, але іноді може згодитись створити власні винятки для дуже специфічних ситуацій. Ми отримуватимемо повідомлення і відбиратимемо голубів, використовуючи наші власні винятки для коректного визначення елементів.

Власні винятки створюються за допомогою класів, і додаючи розділ (Exception) до оголошення класу, ви можете використовувати клас для обробки винятків. Для наших завдань ми створимо два винятки: InvalidLocation, який спрацьовує, коли певний рядок не проходить верифікацію, та UnsuitableSelection, що використовується для перевірки, чи число перевищує певний поріг.

class InvalidLocation(Exception): "Raised when location is invalid" pass class UnsuitableSelection(Exception): "Raised when pidgeon is 2 or younger" pass

Тепер, коли класи готові, настав час отримати меморандуми, щоб їх можна було відправити. Створіть список з ім'ям prep, щоб зберігати та об'єднувати компоненти, необхідні для майбутнього обміну. Пройдіть до темної позначки X над червоним килимом; на ряді столів з позначками X попереду ми шукатимемо меморандуми, що містять замовлення для західного сектора ферми.

У цьому розділі використовуються чотири константи змінних: red_memo, blue_memo, green_memo і orange_memo. Збирати слід лише ті меморандуми, які позначені для доставки в сектор "west", щоб їх можна було відправити. Щоб визначити, чи брати меморандум чи ні, ми використаємо блоки try/except та else разом із власним винятком InvalidLocation. Для використання цього винятку, нехай блок try перевіряє, чи позначений меморандум як "west", а якщо ні, то викликає виняток. Блок except підтверджує, що меморандум недійсний, а блок else збирає та додає до списку prep меморандум, якщо він справді призначений для сектора "west". Наприклад:

try: if red_memo != "west": raise InvalidLocation except InvalidLocation: player.speak("This is not an order that needs to be sent out") else: player.collect(red_memo) prep.append(red_memo)

Пройдіть до кожної темної позначки X над кольоровими килимами перед столами і запустіть послідовність виклику винятків, використовуючи відповідні константи змінних для кожного кольору.

Після того як ви зібрали меморандуми, пройдіть до золотої позначки X перед дверима та використайте функцію open() для доступу до голубників. Усередині пройдіть до світлої позначки X, оберніться і використайте функцію close(), щоб закрити двері та переконатися, що жоден голуб не втече.

Пройдіть до темної позначки X над фіолетовим килимом; на партах ми перевіримо, чи голуб достатньо дорослий для доставки повідомлення, чи він лише молодняк, який не може доставити замовлення. У цьому розділі використовуються ще чотири константи змінних: purple_pen, yellow_pen, white_pen та pink_pen, що відповідають кожному кольоровому килиму. Ми використаємо ту ж техніку, що і з меморандумами, використовуючи другий створений клас.

Використайте блоки try/except та else з власним винятком UnsuitableSelection, щоб визначити, чи голуб достатньо дорослий для доставки. Блок try перевіряє, чи представляє константа змінної для парти придатного голуба, перевіряючи, чи птах молодший за два (2) роки. Якщо голуб недоречний, спрацьовує блок except, інакше активується блок else, що дозволяє додати голуба до списку prep для доставки повідомлення.

try: if purple_pen <= 2: raise UnsuitableSelection except UnsuitableSelection: player.speak("Pigeon unsuitable to deliver") else: prep.append(purple_pen) player.speak("Pigeon Collected")

Пройдіть до кожної темної позначки X над кольоровими килимами і використайте цю послідовність з правильною константою змінної, що відповідає відповідному кольоровому килиму. Після того, як ви зібрали голубів та повідомлення, пройдіть до золотої позначки X абсолютно внизу і використайте функцію place() з вашим списком prep, щоб відправити голубів доставляти повідомлення та завершити рівень.

Книга Коду