학습 자료 글/파이썬 시작하기

[파이썬 기초 시리즈 11]예외 처리와 모듈 기초편

cedis 2026. 3. 24. 01:05
파이썬 기초 완성형 시리즈 · 11장
예외 처리 · try · except · finally · 모듈 · import · 코드 분리

예외 처리와 모듈 기초편
오류에 덜 무너지고, 기능은 더 깔끔하게 나누는 실전형 파이썬의 출발점

이 장에서는 프로그램이 예상치 못한 상황을 만났을 때 어떻게 안전하게 대응할 수 있는지, 그리고 코드를 여러 파일로 나누어 정리된 구조로 관리하는 방법을 배웁니다. 즉 예외 처리는 프로그램이 오류에 덜 무너지게 만들고, 모듈은 코드가 커져도 읽기 쉽고 재사용 가능하게 만들어 줍니다. 이 장의 목표는 try/except의 기본 흐름, finally의 역할, import 문법, 내장 모듈 활용 감각을 확실히 익히는 것입니다.
이 장에서 배우는 것
  • 예외와 오류가 무엇인지 이해합니다.
  • try / except의 기본 구조를 익힙니다.
  • finally가 언제 필요한지 배웁니다.
  • 모듈이 왜 필요한지, import로 어떻게 불러오는지 이해합니다.
  • 표준 모듈 예제와 초보자 실수를 통해 실전 감각을 익힙니다.
이 장을 끝내면
  • 간단한 오류 상황을 try/except로 처리할 수 있습니다.
  • 입력값 오류나 파일 처리 오류에 대비하는 기본 코드를 작성할 수 있습니다.
  • 필요한 기능을 모듈로 분리하거나 기존 모듈을 불러와 사용할 수 있습니다.
  • 다음 장의 실전 응용, 정규표현식, 확장 주제로 넘어갈 준비를 마칠 수 있습니다.
1

오류는 나쁜 코드의 증거가 아니라, 대비가 필요한 상황 신호입니다

초보자는 프로그램이 오류를 내면 “내 코드가 완전히 틀렸구나”라고 생각하기 쉽습니다. 하지만 실제로는 코드 문법이 완전히 틀린 경우도 있지만, 사용자가 예상과 다른 값을 넣었거나, 파일이 없거나, 0으로 나누는 등의 상황 때문에 오류가 나는 경우도 많습니다. 즉 오류는 단순한 실패가 아니라, 프로그램이 예상하지 못한 입력이나 상태를 만났다는 신호이기도 합니다.

그래서 중요한 것은 오류를 무조건 없애는 것만이 아니라, 어떤 오류가 생길 수 있는지 미리 생각하고 대비하는 것입니다. 예외 처리는 바로 그 대비를 코드로 표현하는 방법입니다.

한눈에 보는 예외 처리의 핵심

시도하기
먼저 정상 동작을 기대하는 코드를 실행합니다.
잡아내기
오류가 생기면 프로그램이 바로 무너지지 않게 대응합니다.
정리하기
필요하다면 마지막 정리 작업까지 실행합니다.

try / except: 오류가 날 수 있는 코드를 안전하게 감싸기

예외 처리의 가장 기본 구조는 tryexcept 입니다. 먼저 try 블록 안에서 코드를 실행하고, 그 과정에서 예외가 발생하면 except 블록으로 넘어갑니다.

try:
    num = int(input("숫자를 입력하세요: "))
    print(10 / num)
except:
    print("올바른 숫자를 입력해 주세요")
이 코드는 숫자가 아닌 값을 입력하거나, 0을 넣어 나누기 오류가 생기는 경우에도 프로그램이 바로 중단되지 않고 안내 문구를 보여 줍니다.
기본 구조 요약
try : 먼저 실행해 볼 코드
except : 오류가 났을 때 대신 실행할 코드
핵심은 “오류가 날 가능성이 있는 부분”만 적절히 감싸는 것입니다.

예외 처리 흐름을 단계별로 이해하기

STEP 1
시도
try 안 코드 실행
STEP 2
정상 여부 확인
오류가 없으면 그대로 진행
STEP 3
예외 발생 시
except로 이동
STEP 4
대응
안내문 또는 대체 처리
예외 처리는 오류를 숨기기 위한 장치가 아니라, 오류가 발생했을 때도 프로그램이 더 친절하게 동작하도록 만드는 장치입니다.

예외 종류를 구체적으로 나누기

처음에는 단순한 except: 만 써도 되지만, 점차 어떤 예외인지 구분하는 습관을 들이면 더 좋은 코드가 됩니다.

try:
    num = int(input("숫자 입력: "))
    print(10 / num)
except ValueError:
    print("숫자 형태로 입력해야 합니다")
except ZeroDivisionError:
    print("0으로는 나눌 수 없습니다")
이렇게 나누면 어떤 문제가 생겼는지 사용자에게 더 정확한 안내를 줄 수 있습니다.
초반에 자주 만나는 예외 예시
ValueError : 숫자로 바꿀 수 없는 값을 넣었을 때
ZeroDivisionError : 0으로 나누었을 때
FileNotFoundError : 읽으려는 파일이 없을 때

finally: 마지막에 꼭 실행할 정리 코드

어떤 경우에는 오류가 있든 없든 마지막에 반드시 실행해야 하는 코드가 있습니다. 그럴 때 finally를 사용할 수 있습니다.

try:
    file = open("memo.txt", "r", encoding="utf-8")
    print(file.read())
except FileNotFoundError:
    print("파일이 없습니다")
finally:
    print("파일 읽기 시도 종료")
finally는 성공하든 실패하든 마지막 정리 문장을 실행합니다. 학습 초반에는 “마지막 정리 단계”라고 이해하면 쉽습니다.

모듈은 코드를 기능별로 나눈 부품 상자입니다

이제 모듈을 봅시다. 프로그램이 커질수록 모든 코드를 하나의 파일에 몰아넣으면 읽기 어렵고, 필요한 기능을 다시 쓰기도 불편해집니다. 이때 관련 있는 함수나 변수들을 별도 파일로 나누어 저장해 두면 훨씬 정리된 구조가 됩니다. 이런 파일 단위의 기능 묶음을 모듈이라고 생각하면 됩니다.

모듈이 필요한 이유
  • 기능별로 코드를 나눌 수 있다
  • 다른 파일에서 재사용할 수 있다
  • 코드가 길어져도 관리가 쉬워진다
핵심 이미지
“자주 쓰는 기능을 따로 빼 두고, 필요할 때 불러와 쓰는 파일”이라고 이해하면 가장 쉽습니다.

import: 모듈 불러오기

모듈을 사용하려면 먼저 불러와야 합니다. 파이썬에서는 import를 사용합니다.

import math

print(math.sqrt(16))
위 코드는 수학 관련 기능이 들어 있는 math 모듈을 불러오고, 제곱근 함수 sqrt()를 사용하는 예제입니다.
자주 쓰는 import 형태
import math
import random
from math import sqrt

표준 모듈을 써 보면 감이 빨라집니다

math 모듈
import math
print(math.pi)
print(math.sqrt(25))
원주율, 제곱근처럼 수학 기능을 쉽게 쓸 수 있습니다.
random 모듈
import random
print(random.randint(1, 6))
1부터 6 사이 임의의 숫자를 뽑는 간단한 예제입니다.

내가 만든 함수도 다른 파일로 분리할 수 있습니다

예를 들어 자주 쓰는 계산 함수를 mycalc.py라는 파일에 넣고, 다른 파일에서 불러와 쓸 수 있습니다. 이것이 모듈을 사용하는 가장 직관적인 모습입니다.

mycalc.py
def add(a, b):
    return a + b
main.py
import mycalc
print(mycalc.add(3, 5))
이 구조를 익히면 코드가 길어져도 역할별로 분리해서 관리할 수 있습니다.

짧은 종합 예제: 예외 처리 + 모듈 사용

import random

try:
    num = int(input("1부터 3 사이 숫자를 입력하세요: "))
    if num < 1 or num > 3:
        print("범위를 벗어났습니다")
    else:
        print("랜덤 보너스 숫자:", random.randint(1, 10))
except ValueError:
    print("숫자만 입력해 주세요")
이 예제는 입력, 형변환, 조건문, 예외 처리, 모듈 사용이 모두 연결되어 있습니다. 실제 프로그램은 이런 식으로 여러 문법이 함께 작동합니다.

초보자가 자주 하는 실수 1

try:
    num = int(input("숫자: "))
    print(10 / num)
except:
    print("오류")
무조건 모든 오류를 같은 메시지로 처리하면 원인을 파악하기 어려워집니다. 처음에는 단순히 써도 되지만, 점차 구체적인 예외를 구분하는 방향으로 가는 것이 좋습니다.

초보자가 자주 하는 실수 2

print(math.sqrt(9))
math 모듈을 불러오지 않았기 때문에 오류가 납니다. 모듈 기능을 쓰기 전에는 반드시 import가 필요합니다.

초보자가 자주 하는 실수 3

from math import sqrt
print(math.sqrt(16))
sqrt만 직접 불러왔는데 math라는 이름으로 다시 접근하고 있습니다. import 방식에 따라 호출 방식도 달라진다는 점을 기억해야 합니다.

올바른 수정 예시

from math import sqrt
print(sqrt(16))
import 방식과 사용하는 이름을 일치시키는 것이 중요합니다.

예외 처리와 모듈 사고 흐름 한눈에 보기

STEP 1
오류 가능성 찾기
입력, 파일, 계산 등 위험 지점을 먼저 생각합니다.
STEP 2
try/except 배치
오류가 날 수 있는 핵심 부분만 감쌉니다.
STEP 3
기능 분리
자주 쓰는 코드는 모듈로 분리해 둡니다.
STEP 4
필요할 때 불러쓰기
import로 재사용해 코드 품질을 높입니다.

이 장의 핵심 요약

예외 처리는 오류가 생겨도 프로그램이 더 안정적으로 대응하게 만든다.
try는 시도, except는 예외 발생 시 대응, finally는 마지막 정리 단계다.
모듈은 기능별로 코드를 나눈 파일 단위의 부품이다.
import를 사용하면 표준 모듈이나 내가 만든 모듈을 불러와 재사용할 수 있다.

체크리스트

□ try/except의 기본 구조를 이해하고 직접 작성할 수 있다.
□ ValueError, ZeroDivisionError, FileNotFoundError 같은 기본 예외 예시를 알고 있다.
□ 모듈이 왜 필요한지 설명할 수 있고 import를 사용할 수 있다.
□ math, random 같은 표준 모듈 예제를 이해했다.

미니 연습문제

  1. 숫자를 입력받아 100을 그 숫자로 나누되, 0이나 문자가 들어오면 안내 문구를 출력하는 프로그램을 만들어 보세요.
  2. math 모듈을 사용해 반지름이 5인 원의 넓이를 계산하는 간단한 코드를 작성해 보세요.
  3. random 모듈을 사용해 1부터 10 사이 숫자 하나를 출력하는 코드를 작성해 보세요.
Next Chapter
12장에서는 정규표현식과 실전 응용, 그리고 시리즈 전체를 마무리하는 확장 학습 주제로 넘어가 파이썬 기초를 실제 활용 쪽으로 연결하게 됩니다.
오류 대응과 코드 분리까지 익혔다면, 이제 마지막 장에서 기초를 실제 응용으로 묶는 단계로 넘어갈 수 있습니다.