고급 파이썬 개발 과정
챕터
>
레벨
예외 처리
여러 예외
목표
여러 예외 처리를 사용하여 일부 의료 용품을 상자에 모으고 올바르게 보관하세요.
지붕 위의 저장고는 보충이 필요합니다. 일부 용품은 사용되었지만 대체되지 않았습니다. 저장소 중 한 곳에 있는 메모에 추가 재료 주문이 들어와 있으므로, 이를 처리하는 것이 좋습니다. 즉, 결합하여 상자에 보관해야 하는 다양한 재료들이 있습니다.
상자를 채우는 데 필요한 자료형과 용품의 수가 다르기 때문에 여러 오류가 발생할 수 있습니다. 우리는 try / except를 사용하여 가능한 오류를 포착하고 일부 문제를 해결할 수 있지만, 한 번의 연산에서 여러 오류가 발생할 경우에는 어떻게 해야 할까요? 이를 해결하기 위해 포착하려는 예외를 명시하고 여러 예외를 사용할 수 있습니다.
먼저, 황금색 X 표시로 걸어가서 문을 향한 후, open() 함수를 사용하여 저장고에 들어가세요. 내부에 들어가면 어두운 X 표시로 걸어가 오른쪽으로 돌아 read() 함수를 사용하여 테이블 위 메모에 기록된 주문용 재료와 수량을 확인하세요. 리스트 상수에 관한 정보가 메모에 작성되어 있으며, 용품과 그 주문 내역이 포함되어 있습니다. 작업을 마치면, 저장고 내부의 밝은 X 표시로 걸어가 상자를 향한 후 collect() 함수를 사용하여 내부에 있는 pads 리스트 상수를 가져오세요, 예를 들면: player.collect(pads) .
저장고 안에는 "peroxide"와 "isopropyl"가 비치되어 있으므로, 모두 걸어가서 수집한 후 외부로 나와 보라색 카펫 위의 어두운 X 표시로 이동하세요. 보라색 카펫 위에서 상자를 향한 상태로 collect() 함수를 사용하여 "water bottle"을 가져오고, 노란색 카펫 위의 어두운 X 표시로 이동하여 collect() 함수를 사용해 "glass bottle"을 가져오세요.
이제 물품들이 수집되었으므로 주문을 이행하여 오른쪽에 있는 저장고 상자 안에 모든 재료를 배치할 시간입니다. 이를 위해 먼저 supplies라는 리스트에 "water bottle", "peroxide", "isopropyl"을 저장합니다. 빨강, 초록, 파랑 카펫 위의 어두운 X 표시에서 의료 용품을 보관할 상자를 사용합니다. 이를 위해 세 개의 리스트를 설정할 것입니다: blue_crate = [], green_crate = [] 및 red_crate = [].
모든 항목을 배치하기 전에 리스트들에 재료를 채워 넣어야 합니다. 이를 위해 루프를 사용하여 리스트들을 반복하고 하나의 단일 리스트로 결합할 것입니다. 이 과정은 supplies 목록의 모든 항목을 리스트에 넣고, 저장고 메모의 order에 따라 pads 항목의 수를 나눕니다.
for x in range(5): blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x])
그럼에도 불구하고, 모든 작업이 올바르게 이루어졌음에도 오류가 발생하는 것을 알 수 있습니다. 문제는 supplies 리스트에 항목이 단 세 개(3)만 있는데, 루프가 다섯(5)번 실행되어 Index Error가 발생한다는 것입니다. 반면, pads 리스트도 단 세 개(3) 항목만 가지고 있을 뿐만 아니라 주문 값 중 하나가 0이어서, 어떤 수라도 0으로 나눌 수 없기 때문에 Zero Division Error가 발생합니다.
여기서 다중 예외 처리가 유용합니다. try / except 코드 블록을 사용하여 오류를 포착하고 코드 실행을 계속할 수 있게 합니다. 두 가지 오류가 발생하므로 각각의 오류를 식별하여 특정 예외를 포착해야 합니다. 이는 except 코드 블록을 다음과 같이 확장하여 수행됩니다: except IndexError:와 except ZeroDivisionError:. 예를 들어:
for x in range(5): try: blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x]) except IndexError: blue_crate.append("glass bottle") except ZeroDivisionError: blue_crate.append(0)
Index Error는 리스트에서 누락된 위치를 "glass bottle"로 채워서 수정되며, Zero Division Error는 불법 연산이 발생할 경우 0 값을 추가하여 해결됩니다.
이 작업을 blue_crate = [], green_crate = [] 및 red_crate = [] 리스트에 대해 수행하세요. 파랑, 초록, 빨강 카펫 위의 어두운 X 표시로 걸어가 place() 함수를 사용하여 해당 상자에 리스트를 저장함으로써 레벨을 완료하세요.