🔥 오류와 예외

420자
5분

프로그래밍에서 오류와 예외는 피할 수 없는 부분입니다. 특히 파이썬 같은 동적 언어에서는 런타임(runtime) 오류가 흔하게 발생합니다. 이를 효과적으로 처리하는 것은 프로그램의 안정성과 사용자 경험을 크게 향상시킵니다.

print("Hello World")
# 출력: Hello World
 
print(hello world)
# SyntaxError: invalid syntax
 
python

첫 번째 예시는 정상적인 코드입니다. 하지만 두 번째 예시에서는 문법적 오류로 인해 SyntaxError가 발생합니다.

오류(Error)와 예외(Exception)의 차이

오류와 예외는 종종 혼용되지만, 사실 두 용어는 다른 의미를 갖습니다.

  • 오류(Error): 대부분의 오류는 프로그램 코드의 문제로 해결할 수 없는 심각한 문제를 의미합니다. 예를 들어, 메모리 부족(MemoryError)은 프로그램에서 직접 해결하기 어렵습니다.
  • 예외(Exception): 예외는 프로그램에서 발생할 수 있는 일반적인 오류 유형으로, 대부분 예외 처리를 통해 해결할 수 있습니다.
# MemoryError 예시
x = 'a' * (10 ** 10 ** 10 ** 10 ** 10) # 메모리 부족으로 인한 오류 발생 가능성
 
# ValueError 예시
int("abc") # ValueError: invalid literal for int() with base 10: 'abc'
 
python

구문 오류(Syntax Errors)

구문 오류는 파이썬 코드를 작성할 때 가장 흔하게 마주치는 오류 유형입니다. 이 오류는 파이썬의 문법 규칙을 따르지 않았을 때 발생합니다.

# 구문 오류 예시
print("Hello World
# SyntaxError: EOL while scanning string literal
 
python

따옴표를 닫지 않아 SyntaxError가 발생했습니다.

런타임 오류(Runtime Errors)

런타임 오류는 프로그램이 실행되는 도중에 발생하는 오류입니다. 이러한 오류는 코드가 문법적으로는 올바르지만, 실행 중에 예기치 않은 상황 때문에 발생합니다.

# 런타임 오류 예시
a = 10
b = 0
print(a / b)
# ZeroDivisionError: division by zero
 
python

0으로 나누려고 하여 ZeroDivisionError가 발생했습니다.

예외 처리(Exception Handling)

예외 처리는 파이썬에서 오류가 발생했을 때 이를 감지하고, 프로그램을 안전하게 종료하거나 문제를 해결하는 방법입니다.

# 예외 처리 예시
try:
    print(10 / 0)
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
 
python

try 블록 안의 코드에서 `ZeroDivision

Error가 발생하면, except` 블록이 실행되어 오류 메시지를 출력합니다.

여러 예외 처리

하나의 try 블록에서 여러 종류의 예외를 처리할 수 있습니다. 이를 통해 다양한 상황에 대응하는 견고한 코드를 작성할 수 있습니다.

try:
    # 여러 가지 오류가 발생할 수 있는 코드
    pass
except (TypeError, ValueError) as e:
    print(f"에러 발생: {e}")
 
python

TypeError 또는 ValueError 중 하나가 발생하면 해당 오류 메시지를 출력합니다.

사용자 정의 예외(User-Defined Exceptions)

파이썬에서는 사용자가 직접 예외 클래스를 정의하여 특정 상황에 맞는 예외 처리를 할 수 있습니다.

class MyError(Exception):
    pass
 
try:
    raise MyError("내가 만든 오류")
except MyError as e:
    print(f"발생한 오류: {e}")
 
python

MyError라는 사용자 정의 예외를 만들고, 이를 raise 문을 통해 발생시킨 후 처리합니다.

연습문제

  1. IndexErrorKeyError 예외를 처리하는 코드를 작성하세요.
  2. 사용자 정의 예외를 만들고, 이를 발생시켜보세요. 그리고 이를 적절히 처리하는 코드를 작성하세요.
  3. try, except, else, finally 블록의 각각의 용도와 차이점에 대해 설명하세요.