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, чтобы отправить голубей для доставки сообщений и завершения уровня.

Книга Кода