🔥 예외 발생시키기
파이썬에서 예외(Exception)는 프로그램 실행 중에 발생하는 오류나 예기치 않은 상황을 의미합니다. 일반적으로 프로그램이 정상적으로 작동하지 않을 때 발생하며, 이를 적절히 처리하지 않으면 프로그램이 강제 종료됩니다. 그러나 경우에 따라 프로그래머는 의도적으로 예외를 발생시켜 특정 상황을 제어할 필요가 있습니다. 이 장에서는 raise 키워드를 사용하여 파이썬에서 예외를 어떻게 발생시키는지, 그리고 그러한 예외들을 어떻게 효과적으로 활용할 수 있는지에 대해 자세히 살펴보겠습니다.
예외 발생의 기본
파이썬에서 raise 구문을 사용하여 강제로 예외를 발생시킬 수 있습니다. 기본적인 형태는 다음과 같습니다.
raise Exception("에러 메시지")
raise Exception("에러 메시지")
이 구문은 Exception 타입의 예외를 발생시키며, 괄호 안에는 해당 예외에 대한 설명을 문자열로 전달할 수 있습니다.
def check_age(age):
if age < 18:
raise ValueError("미성년자는 접근할 수 없습니다.")
else:
print("접근이 허용되었습니다.")
try:
check_age(17)
except ValueError as e:
print("발생한 예외:", e)
def check_age(age):
if age < 18:
raise ValueError("미성년자는 접근할 수 없습니다.")
else:
print("접근이 허용되었습니다.")
try:
check_age(17)
except ValueError as e:
print("발생한 예외:", e)
예외 체이닝
예외 체이닝(Exception Chaining)은 하나의 예외가 다른 예외를 발생시키는 과정을 의미합니다. from 키워드를 사용하여 예외 사이의 관계를 명확히 할 수 있습니다.
try:
int('a')
except ValueError as e:
raise RuntimeError("숫자 변환 실패") from e
try:
int('a')
except ValueError as e:
raise RuntimeError("숫자 변환 실패") from e
조건에 따른 예외 발생
특정 조건을 만족할 때만 예외를 발생시키는 것도 중요합니다. 이를 통해 예상치 못한 상황을 예방하고 프로그램의 안정성을 높일 수 있습니다.
def divide(x, y):
if y == 0:
raise ValueError("0으로 나눌 수 없습니다.")
return x / y
try:
result = divide(10, 0)
except ValueError as e:
print(e)
def divide(x, y):
if y == 0:
raise ValueError("0으로 나눌 수 없습니다.")
return x / y
try:
result = divide(10, 0)
except ValueError as e:
print(e)
여러 예외 동시 처리
하나의 try 블록에서 여러 종류의 예외를 처리할 수 있습니다. 이는 코드의 간결성을 유지하면서도 다양한 예외 상황에 대처할 수 있게 합니다.
try:
# 여러 가지 연산
pass
except (TypeError, ValueError) as e:
print("Type 또는 Value 에러 발생:", e)
try:
# 여러 가지 연산
pass
except (TypeError, ValueError) as e:
print("Type 또는 Value 에러 발생:", e)
예외 재발생
처리한 예외를 다시 발생시키고 싶을 때 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)
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)
연습문제
- 양수가 아닌 숫자를 입력했을 때
ValueError예외를 발생시키는 함수를 작성하세요. - 파일을 읽는 함수에서
FileNotFoundError와PermissionError를 각각 처리하는 예외 처리 코드를 작성하세요. raise ... from ...구문을 사용하여 두 개의 예외를 연결하는 예제를 작성하세요. 첫 번째 예외는KeyError, 두 번째 예외는LookupError로 하세요.












