고급 파이썬 개발 과정
챕터
>
레벨
예외 처리
예외 클래스 사용자 정의
목표
수집된 빗물을 확인하고 사용자 정의 예외 클래스를 사용하여 제대로 처리 및 전송되고 있는지 확인합니다.
옥상 단지의 맨 끝에는 수집된 빗물이 담긴 집수조가 있습니다. 이 물은 여과되어 건물 전체로 다양한 용도로 전송됩니다. 상부 벽에 있는 일부 밸브는 펌프로 공급되는 물의 압력을 제어하며, 마지막 창고에는 다양한 온수기가 있습니다. 기계를 작동하는 것은 까다로울 수 있지만, 오류 코드를 명시하고 효과적인 대응책을 마련함으로써 작업을 효율적으로 진행할 수 있습니다. 이는 사용자 정의 예외를 위해 직접 생성한 사용자 정의 예외 클래스를 사용하여 달성됩니다.
코드 에디터에는 두 개의 사용자 정의 예외 클래스가 설정되어 있으며, 이들을 사용할 줄 아는 능력은 기계 문제를 해결하는 데 필수적입니다. 첫 번째 예외 클래스는 수압 문제를 해결하기 위한 것입니다. 밸브와 함께 사용되어 물이 집수조로 적절히 흘러들어가는지, 그리고 압력을 조정할 필요가 있는지를 확인하기 위해 설계되었습니다. 압력이 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 마크로 이동하여 밸브가 있는 탱크를 마주하십시오. 이 탱크들은 집수조에서 펌프로 공급되는 물의 압력을 조절하는 네 (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: player.speak(x) 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: player.speak(x) else: player.speak( "Temperature is ok" )
각 온수기에 대해 이 작업을 수행하십시오. 각 X 마크에서 온수기를 마주하며, 해당 색상의 카펫에 맞는 변수 상수를 사용하여 시퀀스를 실행함으로써 레벨을 완료합니다.