🔥 예외 발생시키기

360자
5분

파이썬에서 예외(Exception)는 프로그램 실행 중에 발생하는 오류나 예기치 않은 상황을 의미합니다. 일반적으로 프로그램이 정상적으로 작동하지 않을 때 발생하며, 이를 적절히 처리하지 않으면 프로그램이 강제 종료됩니다. 그러나 경우에 따라 프로그래머는 의도적으로 예외를 발생시켜 특정 상황을 제어할 필요가 있습니다. 이 장에서는 raise 키워드를 사용하여 파이썬에서 예외를 어떻게 발생시키는지, 그리고 그러한 예외들을 어떻게 효과적으로 활용할 수 있는지에 대해 자세히 살펴보겠습니다.

예외 발생의 기본

파이썬에서 raise 구문을 사용하여 강제로 예외를 발생시킬 수 있습니다. 기본적인 형태는 다음과 같습니다.

raise Exception("에러 메시지")
 
python

이 구문은 Exception 타입의 예외를 발생시키며, 괄호 안에는 해당 예외에 대한 설명을 문자열로 전달할 수 있습니다.

def check_age(age):
    if age < 18:
        raise ValueError("미성년자는 접근할 수 없습니다.")
    else:
        print("접근이 허용되었습니다.")
 
try:
    check_age(17)
except ValueError as e:
    print("발생한 예외:", e)
 
python

예외 체이닝

예외 체이닝(Exception Chaining)은 하나의 예외가 다른 예외를 발생시키는 과정을 의미합니다. from 키워드를 사용하여 예외 사이의 관계를 명확히 할 수 있습니다.

try:
    int('a')
except ValueError as e:
    raise RuntimeError("숫자 변환 실패") from e
 
python

조건에 따른 예외 발생

특정 조건을 만족할 때만 예외를 발생시키는 것도 중요합니다. 이를 통해 예상치 못한 상황을 예방하고 프로그램의 안정성을 높일 수 있습니다.

def divide(x, y):
    if y == 0:
        raise ValueError("0으로 나눌 수 없습니다.")
    return x / y
 
try:
    result = divide(10, 0)
except ValueError as e:
    print(e)
 
python

여러 예외 동시 처리

하나의 try 블록에서 여러 종류의 예외를 처리할 수 있습니다. 이는 코드의 간결성을 유지하면서도 다양한 예외 상황에 대처할 수 있게 합니다.

try:
    # 여러 가지 연산
    pass
except (TypeError, ValueError) as e:
    print("Type 또는 Value 에러 발생:", e)
 
python

예외 재발생

처리한 예외를 다시 발생시키고 싶을 때 raise를 사용할 수 있습니다. 이는 현재 처리 중인 예외를 호출자에게 다시 전달하는 방법입니다.

def process_file(filename):
    try:
        file = open(filename, 'r')
        # 파일 처리
    except IOError as e:
        print("파일 처리 중 오류 발생")
        raise
    finally:
        file.close()
 
try:
    process_file("없는파일.txt")
except IOError as e:
    print("파일을 처리하는 과정에서 오류 발생:", e)
 
python

연습문제

  1. 양수가 아닌 숫자를 입력했을 때 ValueError 예외를 발생시키는 함수를 작성하세요.
  2. 파일을 읽는 함수에서 FileNotFoundErrorPermissionError를 각각 처리하는 예외 처리 코드를 작성하세요.
  3. raise ... from ... 구문을 사용하여 두 개의 예외를 연결하는 예제를 작성하세요. 첫 번째 예외는 KeyError, 두 번째 예외는 LookupError로 하세요.