고급 파이썬 개발 과정
챕터
>
레벨
예외 처리
사용자 정의 예외 클래스
목표
수집된 빗물을 확인하고 사용자 정의 예외 클래스를 통해 올바르게 처리 및 전달되고 있는지 보장하세요.
지붕 단지의 끝쪽에는 빗물을 모은 물탱크가 있으며, 이 물은 필터링되어 건물 전체로 다양한 용도로 전달됩니다. 높은 벽에 설치된 몇몇 밸브는 흐르는 물의 압력을 제어하며, 마지막 저장소에는 다양한 온수기가 배치되어 있습니다. 기계를 작동하는 일은 까다로울 수 있으나, 오류 코드를 명시하고 효과적인 대응책을 마련함으로써 작동을 효율화할 수 있습니다. 이는 사용자 정의 예외를 위해 생성한 사용자 정의 예외 클래스를 통해 달성됩니다.
코드 편집기에는 두 개의 사용자 정의 예외 클래스가 설정되어 있으며, 이를 사용하는 능력은 기계 문제 해결에 필수적입니다. 첫 번째 예외는 수압 문제를 해결하기 위한 것으로, 밸브와 함께 사용되어 물이 단지 내부로 제대로 흐르는지 또는 압력 조절이 필요한지를 확인합니다. 압력이 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) 개의 변수 상수인 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 표시에서 온수기를 바라보면서 해당 색 카펫에 해당하는 변수 상수를 사용하여 시퀀스를 실행함으로써 레벨을 완료하세요.