Продвинутый курс разработки на Python
Глава
>
Уровень

Обработка исключений
Настройка классов исключений

Цель

Проверьте собранную дождевую воду и убедитесь, что она правильно обрабатывается и передается, настраивая классы исключений.

На дальней части крыши находится цистерна с собранной дождевой водой, эта вода фильтруется и распределяется по всему зданию для различных целей. Некоторые клапаны на верхней стене контролируют давление воды, а в последнем складском помещении находятся различные водонагреватели. Эксплуатация механизмов может быть сложной, однако их работу можно оптимизировать, описывая коды ошибок и устанавливая эффективные меры противодействия. Это достигается за счет настройки классов исключений, которые вы создаете для ваших пользовательских исключений.

В редакторе кода настроены два пользовательских класса исключений, и ваша способность использовать их будет ключевым элементом для устранения неполадок в работе механизмов, с которыми вы столкнетесь. Первый применяется для диагностики давления воды. Он предназначен для использования с клапанами, чтобы обеспечить корректное поступление воды в комплекс или, при необходимости, скорректировать давление. В зависимости от того, ниже ли давление 100 или выше 300, исключение выполняет разные действия, при этом давление передается как аргумент. После срабатывания исключения отображается всплывающее окно с кодом ошибки и сообщением.

class PressureError(Exception): def __init__(self, pressure, message="Water pressure is offset, pressure is: ", error_code=404): self.pressure = pressure self.message = message self.error_code = error_code super().__init__(self.message) async def eval(self): await player.display("[Error: %s {%s %s}]" % (self.error_code , self.message, self.pressure)) if self.pressure < 100: return ("Valve has been closed") if self.pressure > 360: return ("Valve has been opened")

Второй пользовательский класс исключений предназначен для регулирования температуры в водонагревателях. Если температура слишком низкая или слишком высокая, вы должны указать новую температуру в качестве аргумента, чтобы корректировать ошибку при ее возникновении.

class TemperatureError(Exception): def __init__(self, temp, message="Temperature is not appropiate, enter new temperature: ", error_code=808): self.temp = temp self.message = message self.error_code = error_code super().__init__(self.message) async def eval(self): await player.display("[Error: %s {%s %s}]" % (self.error_code , self.message, self.temp)) return ("Temperature Corrected")

Для начала подойдите к светлой X-отметке на зеленом ковре и повернитесь лицом к резервуару с клапаном, которых всего четыре, регулирующие давление воды, поступающей из цистерны. Существуют четыре переменные-константы: green_pressure, red_pressure, blue_pressure и orange_pressure, которые содержат давление в резервуарах, соответствующих цветным коврам.

На всех светлых X-отметках используйте последовательности кода try/except и else, чтобы проверить, соответствует ли давление в каждом резервуаре норме. Если давление ниже 100 или выше 300, выбрасывайте исключение PressureError, передавая давление в качестве аргумента. При активации исключения будет показан код ошибки и произведена корректировка, а в противном случае сработает блок else, подтверждающий, что давление в резервуаре в норме. Например:

try: if green_pressure < 100 or green_pressure > 360: raise PressureError(green_pressure) except PressureError as x: error = await x.eval() player.speak(error) else: player.speak( "Pressure is appropriate" )

Сделайте это на всех светлых X-отметках, используя соответствующие переменные-константы для каждого цветного ковра, чтобы проверить или отрегулировать клапаны давления по мере необходимости.

После этого подойдите к золотой X-отметке и используйте функцию open() для доступа в склад с водонагревателем. Оказавшись внутри, подойдите к золотой X-отметке внутри склада и используйте функцию read(), чтобы прочитать записку на прилавке. Эта записка предоставит вам информацию о том, какая температура является идеальной для каждого из водонагревателей.

Когда у вас появится информация о температуре каждого устройства, направляйтесь к темной X-отметке на фиолетовом ковре. Здесь мы воспользуемся последовательностью кода try/except и else, чтобы проверить, соответствует ли температура в водонагревателях норме. Существуют еще четыре переменные-константы, связанных с коврами: purple_temperature, yellow_temperature, pink_temperature и white_temperature.

В этой последовательности проверяется, ниже ли температура 100, и если да, выбрасывается исключение TemperatureError. Как настраиваемое исключение, оно принимает аргумент, в данном случае вы должны ввести температуру, указанную в записке, для корректного выполнения меры по исправлению ошибки. Например:

try: if purple_temperature < 100: raise TemperatureError(120) except TemperatureError as x: error = await x.eval() player.speak(error) else: player.speak( "Temperature is ok" )

Сделайте это для всех водонагревателей: на каждой X-отметке, обращенной к водонагревателям, выполните последовательность, используя соответствующие переменные-константы для цветных ковров, чтобы завершить уровень.

Книга Кода