高级 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 的光标,并面向带有阀门的水箱,在那里有四个(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 的地方,当面向热水器时,使用与相应彩色地毯对应的变量常量执行该序列,以完成这一关卡。