강의로 돌아가기
JinJoo Lee

raise 구문을 활용해 발생시킬 수 있는 에러의 타입

안녕하세요. raise 구문 복습하다가 궁금한 것이 생겨 질문드립니다.
(1)
raise 는 에러를 강제하는 구문이라고 배웠습니다. raise구문을 사용하면 원래 발생할 에러 말고 다른 종류의 에러를 발생시킬 수 있나요?
예를 들어, list.remove() 연산자는 리스트에서 지정한 값을 제거합니다. 리스트에 존재하지 않는 값을 입력하면 ValueError가 뜨는데, raise 구문을 이용하여 IndexError가 발생하도록 강제할 수 있나요?
저 혼자 실험해보았는데 그대로 ValueError가 뜨더라구요..혹시 제가 놓친 부분이 있는 것은 아닌지, 아니면 원래 raise 구문은 기존에 발생하는 것과 다른 에러를 강제할 수는 없는지 궁금합니다.

(2)
만일 raise 구문으로 기존에 발생할 에러 말고 다른 에러를 강제할 수 없다면,
except exception as ex : 를 활용해 에러를 먼저 찾은 후 그 에러를 받아 except Exception(ex로 찾은 함수를 받아서 처리함)구문으로 처리하지 않고 raise 구문으로 에러를 강제하는 이유가 궁금합니다.
raise와 except exception as ex 구문 둘의 활용이 어떻게 다른지 설명 부탁드립니다.

1 개의 답변
Demi

list.remove 에서 리스트에 존재하지 않는 값을 입력했을 때, IndexError를 발생시킬 수 있는지 물어보셨는데요.

remove 메소드가 IndexError 를 발생하게 만드는건 불가능합니다. ValueError는 remove 메소드 안에서 발생하는 것이라, remove 메소드가 IndexError를 내게하려면 remove 메소드를 수정해야하는데 이건 불가능하지요. 대신 이런 방법을 쓸 수는 있을 것 같네요.

  1. remove 메소드를 쓰는 구문을 예외처리블록으로 감싸고
  2. ValueError가 발생하면 이 에러를 처리하는 곳에서 IndexError를 대신 raise 하는 겁니다.

이런 코드가 되겠네요.

my_list = [1,2,3]

try:
    my_list.remove(4)
except ValueError:
    raise IndexError
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.