Coding for KidsCoding for Kids
创意关卡挑战教师指南
为功能投票
高级 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 __str__(self): await player.write("[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 __str__(self): await player.write("[Error: %s {%s %s}]" % (self.error_code , self.message, self.temp)) return ("Temperature Corrected")

首先,走到绿色地毯上带有亮 X 标记的位置,面对带有阀门的水箱,这里共有四个阀门用于调节从水箱抽水的压力。共有四个变量常量:green_pressurered_pressureblue_pressureorange_pressure,它们分别记录对应色地毯下每个水箱的压力。

在所有的亮 X 标记处,使用 try/exceptelse 代码块序列来验证每个水箱的压力是否适当。如果压力低于 100 或超过 300,则触发自定义的 PressureError 异常,并将压力作为参数传入。如果异常被触发,会显示错误代码并提出修正,否则会执行 else 子句,确认水箱内的压力适当。例如:

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

在所有亮 X 标记处都执行此操作,使用对应各色地毯的变量常量,根据需要验证或调整压力阀。

完成后,走到金色 X 标记处,使用 open() 函数进入装有热水器的储藏室。进入后,再走到储藏室内的金色 X 标记处,使用 read() 函数阅读柜台上的备忘录。该备忘录将为您提供每台热水器的理想温度相关信息。

获取每台热水器的温度信息后,走到紫色地毯上带有暗 X 标记的位置,在这里我们将使用 try/exceptelse 代码序列来验证热水器的温度是否正确。还有四个变量常量与这些彩色地毯对应:purple_temperatureyellow_temperaturepink_temperaturewhite_temperature

在此过程中,我们将验证温度是否低于 100,如果是,则会触发 TemperatureError 异常。作为一种自定义异常,它需要一个参数,在这种情况下,您必须输入备忘录中读取的温度,以便正确执行异常的对策来纠正问题。例如:

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

对所有热水器执行此操作,在每个 X 标记处,当面向热水器时,使用与正确彩色地毯对应的变量常量执行此序列,以完成此关卡。

代码书