파이썬과 루비의 예외 처리

예외가 안 났을 때만 실행할 코드는 어디에 둘까?

화면을 누르면 다음 장으로 넘어갑니다

파이썬의 예외 계층

파이썬의 예외도 객체입니다

파이썬의 예외도 객체이고, 맨 위의 클래스는 BaseException입니다. 미리 정의된 예외와 사용자 정의 예외는 모두 그 아래 Exception에서 물려받습니다.

이름 옆의 우리말은 뜻을 옮긴 것입니다. 키는 연관 배열(키로 값을 찾는 배열, 파이썬의 딕셔너리)에서 값을 찾을 때 쓰는 이름표입니다(5강).

처리기 고르기

적은 예외와 그 자손을 받습니다

except 절은 거기 적은 예외와 그 자손 클래스의 예외를 모두 받습니다. except Exception이라고 적으면 미리 정의된 예외와 사용자 정의 예외를 모두 받습니다.

예외는 raise IndexError처럼 적어 발생시킵니다. except Exception as ex_obj라고 적으면 예외 객체를 ex_obj라는 이름으로 받습니다.

else와 finally

예외가 없을 때만 실행하는 else

파이썬의 try 문은 네 부분입니다. try 블록, 처리기인 except 절, 예외가 나지 않았을 때만 실행되는 else 블록, 언제나 실행되는 finally 블록입니다.

파이썬 예시 코드입니다. 맞는 except 절이 없으면 가장 가까운 바깥 try로 전파되고, 끝까지 없으면 기본 처리기가 불립니다.

루비

루비는 begin과 rescue

루비도 예외가 객체이고 미리 정의된 예외가 많습니다. 처리기는 begin으로 시작해 end로 끝나는 블록의 끝부분에 rescue로 적습니다. else 절과 ensure 절은 파이썬의 else, finally와 같은 일을 합니다.

프로그램이 처리하는 루비의 예외는 StandardError 클래스이거나 그 자손입니다. 여기에는 message와 backtrace 메서드가 있습니다.

루비의 raise

조건을 붙여 한 줄로 던집니다

루비에서는 raise로 예외를 발생시킵니다. 문장 뒤에 if 조건을 붙일 수 있어서, 조건이 참일 때만 던지는 문장을 한 줄로 자주 적습니다.

교재의 예입니다. count == 0은 count가 0과 같은지 묻는 조건이고, "bad parameter"는 잘못된 매개변수라는 뜻입니다.

루비의 retry

루비는 다시 해 볼 수 있습니다

루비는 다른 언어와 달리, 예외를 일으킨 코드를 다시 실행할 수 있습니다. 처리기 끝에 retry를 적으면 됩니다.

루비 예시 코드입니다. connect와 wait는 연결하기, 잠깐 기다리기를 하는 메서드라고 가정했습니다.

다음 편

이번에는 오류가 아니라 사용자의 동작에 응답합니다

9편버튼을 누르면 누가 알아챌까? 13강 목록