🔥 오류와 예외
강의 목차
프로그래밍에서 오류와 예외는 피할 수 없는 부분입니다. 특히 파이썬 같은 동적 언어에서는 런타임(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
문을 통해 발생시킨 후 처리합니다.
연습문제
IndexError
와KeyError
예외를 처리하는 코드를 작성하세요.- 사용자 정의 예외를 만들고, 이를 발생시켜보세요. 그리고 이를 적절히 처리하는 코드를 작성하세요.
try
,except
,else
,finally
블록의 각각의 용도와 차이점에 대해 설명하세요.