Поглиблений курс розробки на Python
Розділ
>
Рівень
Обробка винятків
Налаштування класів виключень
Мета
Перевірте зібрану дощову воду та забезпечте її правильну обробку та передачу шляхом налаштування власних класів виключень.
На дальньому кінці даху знаходиться цистерна, що збирає дощову воду. Цю воду фільтрують і розподіляють по всій будівлі для різних потреб. Деякі клапани на верхній стіні регулюють тиск води, а в останньому приміщенні зберігаються різні водонагрівачі. Експлуатація машин може бути складною, але її роботу можна ефективно оптимізувати, описавши коди помилок та встановивши ефективні протидії. Це досягається шляхом налаштування класів виключень, які ви створюєте для власних винятків.
У редакторі коду налаштовано два класи користувацьких виключень, і ваша здатність використовувати їх буде суттєвою для усунення будь-яких проблем з обладнанням, з якими ви стикнетеся. Перший клас допомагає усунути проблеми з тиском води. Він призначений для використання з клапанами для забезпечення належного потоку води в комплекc або для регулювання тиску. Залежно від того, чи є тиск менше 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 на зеленому килимі і підійдіть до бака з клапаном. Є чотири (4) такі клапани, що регулюють тиск води, яку перекачують з цистерни. Існують чотири (4) змінні константи: 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, щоб перевірити, чи відповідає температура водонагрівачів нормі. Є ще чотири (4) змінні константи, пов’язані з кольоровими килимами: 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, коли ви звернені до нагрівачів, виконайте послідовність, використовуючи змінні константи, що відповідають правильним кольоровим килимам, щоб завершити рівень.