# Python 공부 시리즈 12편: 예외 처리 (Exception Handling)

Han·2025년 7월 28일

Python 입문 시리즈

목록 보기
13/14

Python은 예외 처리(try-except) 구문을 통해 프로그램의 비정상 종료를 방지하고, 예외 상황을 우아하게 처리할 수 있도록 도와줍니다.


1. 예외란?

예외(Exception)는 프로그램 실행 중 발생하는 오류입니다.

예시: ZeroDivisionError

python
 
print(10 / 0)

ZeroDivisionError: division by zero

위처럼 예외가 발생하면 프로그램이 중단됩니다. 이 문제를 해결하려면 예외 처리 구문을 사용해야 합니다.


2. try - except 기본 구조

python

try:
	실행할 코드
except 예외타입:
	예외 발생 시 실행할 코드

예제

python

try:
	num = int(input("숫자를 입력하세요: "))
    print(10/num)
except ZeroDivisionError:
	print("0으로 나눌 수 없습니다.")
except ValueError:
	print("정수를 입력해주세요.")

3. 여러 예외 처리하기

except 블록을 여러 개 사용할 수 있으며, 예외 메시지도 출력할 수 있습니다.

python

try:
    num = int(input("숫자 입력: "))
    print(10 / num)
except ZeroDivisionError as e:
    print("오류:", e)
except ValueError:
    print("숫자가 아닙니다.")

4. 모든 예외 처리(비추천)

python

try:
    # 코드
except Exception as e:
    print("알 수 없는 오류 발생:", e)
  • Exception은 모든 예외의 최상위 클래스
  • 디버깅이 어려워질 수 있으므로, 가능한 구체적인 예외만 처리하는 것이 좋습니다.

5. else와 finally

🔸 else

  • 예외가 발생하지 않는 경우에만 실행됩니다.
python

try:
    num = int(input("숫자 입력: "))
except ValueError:
    print("정수가 아닙니다.")
else:
    print("입력 성공:", num)

🔸 finally

  • 예외 발생 여부와 관계없이 항상 실행되는 블록
  • 자원 해제, 파일 닫기 등에 사용
python

try:
    f = open("file.txt", "r")
    print(f.read())
except FileNotFoundError:
    print("파일이 존재하지 않습니다.")
finally:
    f.close()
    print("파일 닫기 완료")

6. raise 키워드 (예외 직접 발생)

개발자가 의도적으로 예외를 발생시킬 수 있습니다.

python

def divide(x):
    if x == 0:
        raise ValueError("0으로 나눌 수 없습니다.")
    return 10 / x

try:
    print(divide(0))
except ValueError as e:
    print("오류 발생:", e)

7. 사용자 정의 예외 클래스

기존 예외로 처리하기 애매한 상황에 대해 직접 예외 클래스를 정의할 수 있습니다.

python

class NegativeNumberError(Exception):
    def __init__(self, value):
        self.value = value

def check_number(n):
    if n < 0:
        raise NegativeNumberError(n)

try:
    check_number(-10)
except NegativeNumberError as e:
    print(f"음수는 허용되지 않습니다: {e.value}")
  • Exception을 상속하여 새로운 예외 타입을 정의합니다.

실전 팁

  • 예외 처리는 예상 가능한 오류를 미리 방지하고, 사용자 경험을 향상시킵니다.
  • 너무 많은 예외를 포괄적으로 처리하기보다는, 구체적인 예외를 명시적으로 잡는 것이 중요합니다.
  • fianlly는 꼭 필요한 경우에만 사용하고, 파일/자원 해제와 같이 반드시 처리해야하는 작업에 활용하세요.

마무리
이번 편에서는 Python의 예외 처리 흐름을 기초부터 심화까지 다뤘습니다.
| 키워드 | 역할 |
| --------- | ------------------ |
| try | 예외가 발생할 수 있는 코드 블록 |
| except | 예외 발생 시 실행할 코드 |
| else | 예외가 발생하지 않았을 때 실행 |
| finally | 무조건 실행되는 코드 블록 |
| raise | 직접 예외를 발생시킴 |
| 사용자 정의 예외 | 예외 상황을 커스터마이징 |

다음 편에서는 Python의 핵심 개념 중 하나인 객체지향 프로그래밍을 학습해보겠습니다.

profile
개발자를 꿈꾸는 청년

0개의 댓글