본문 바로가기
Language/Python

[고등학생부터, 파이썬] 19. 예외처리(Exception)

by kellis 2026. 9. 7.
반응형
고등학생부터, 파이썬 · 19화

예외 처리(Exception) — 오류가 나도 멈추지 않는 프로그램

지금까지는 프로그램이 실행 중 오류를 만나면 그 자리에서 에러와 함께 바로 종료됐습니다. 이번에는 오류가 나도 프로그램이 멈추지 않고 계속 실행되도록 만드는 try·except 문법을 배웁니다.

이 시리즈를 시작하며

요즘은 고등학교에서도 코딩을 정규 과목으로 가르치는 시대입니다. 전공자가 아니어도 바이브 코딩(Vibe Coding)이나 생성형 AI(Generative AI)를 활용하면 누구나 그럴듯한 코드 결과물을 만들어낼 수 있게 되었죠. 

개발 언어를 접하는, 전공자가 아닌 일반인 입문자가 많아진 것입니다.

이 시리즈는 글쓴이가 실제로 일반인, 고등학생 등 비전공자·입문자에게 파이썬을 가르치면서 정리한 내용들을 교재 형식으로 엮은 글입니다.최대한 쉽고 친절하게 설명하면서도, 컴퓨터와 프로그래밍 언어에 대한 기초 이론까지 함께 짚고 넘어가려 합니다.

 

고등학생, 비전공자, 완전 입문자도 따라올 수 있게끔 만든 시리즈이고, 실제 과외 수업 자료를 바탕으로 만들어서 학교 시험처럼 개념 확인 문제도 그대로 들어있어요.

중간중간 빈칸 채우기학교 시험 유형 문제가 나오는데, 정답은 바로 안 보이게 접어뒀습니다. 먼저 스스로 생각해본 다음 "보기"를 눌러서 확인해보세요.

Chapter 35
예외 처리(Exception) · 오류가 나도 멈추지 않게

프로그램을 실행하다 보면 여러 가지 오류가 발생할 수 있습니다. 예를 들어 숫자를 입력해야 하는데 문자를 입력하거나, 없는 파일을 읽으려고 하는 경우예요. 이런 오류를 예외(Exception)라고 합니다. 예외가 발생하면 프로그램은 바로 종료됩니다. 예외 처리를 사용하면 프로그램이 종료되지 않고 계속 실행할 수 있어요.

선생님 설명 · 자전거와 돌 이야기

자전거를 타다가 돌을 만나면 멈춰 버릴 수도 있습니다. 하지만 돌을 피해 가면 계속 갈 수 있어요. 예외 처리도 같습니다. 오류가 발생해도 프로그램을 계속 실행하도록 만드는 것이 예외 처리예요.

예외가 발생하는 예
python
num = int(input("숫자 입력 : "))

print(num)
실행 결과 (abc 입력 시)
숫자 입력 : abc
ValueError: invalid literal for int() with base 10: 'abc'

입력으로 "abc"처럼 숫자가 아닌 문자를 넣으면 int("abc")가 실행되는 순간 ValueError라는 예외가 발생하고, 프로그램이 그 자리에서 바로 종료됩니다.

try / except 기본 문법
python
try:
    실행할 코드
except:
    오류가 발생했을 때 실행할 코드

try 블록 안의 코드를 실행하다가 오류가 발생하면, 그 즉시 실행을 멈추고 except 블록으로 넘어갑니다. 오류가 없다면 except 블록은 아예 실행되지 않아요.

가장 쉬운 예제
python
try:
    num = int(input("숫자 입력 : "))
    print(num)
except:
    print("숫자를 입력하세요.")
실행 결과 (abc 입력 시)
숫자 입력 : abc
숫자를 입력하세요.

이번에는 오류가 발생해도 프로그램이 종료되지 않고, except 블록의 안내 메시지를 출력한 뒤 정상적으로 다음 코드를 계속 실행합니다.

오류가 없으면?
python
try:
    print(10 + 20)
except:
    print("오류 발생")
30

10 + 20은 오류 없이 정상적으로 계산되므로, except는 실행되지 않고 무시됩니다.

예제 · 없는 파일 읽기

open("test.txt","r")에서 파일이 없으면 오류가 나지만, try로 감싸면 "파일이 존재하지 않습니다."를 출력하고 계속 진행합니다.

예제 · 0으로 나누기

10 / 0ZeroDivisionError를 일으키지만, try로 감싸면 "0으로 나눌 수 없습니다."를 출력하고 계속 진행합니다.

예제 · 여러 번 입력받기
python
while True:
    try:
        num = int(input("숫자 입력 : "))
        break
    except:
        print("숫자를 입력하세요.")

숫자가 아닌 값을 입력하면 except가 실행되고, while이 다시 처음으로 돌아가 재입력을 요청합니다. 올바른 숫자를 입력해야만 break로 반복문을 빠져나가요. 실무에서도 자주 사용하는 패턴입니다.

특정 예외 처리

모든 오류를 except: 하나로 처리할 수도 있지만, 오류의 종류를 구분해서 각각 다르게 처리할 수도 있어요.

python
try:
    num = int(input())
except ValueError:
    print("숫자를 입력하세요.")

except ValueError:처럼 예외 이름을 지정하면, 그 종류의 오류일 때만 이 except가 실행돼요. 다른 종류의 오류라면 잡히지 않고 그대로 프로그램이 종료됩니다.

자주 하는 실수
  • try만 작성 (except 없음)except가 반드시 필요합니다. try만 단독으로 쓸 수는 없어요.
  • 들여쓰기를 하지 않는 경우 — try 블록 안의 코드는 반드시 들여쓰기해야 합니다.
  • try 밖에서 오류가 발생하는 경우num = int(input())을 try 밖에 두면, 오류가 이미 try 이전에 발생해서 예외 처리가 동작하지 않아요. 오류가 날 수 있는 코드는 반드시 try 안에 넣어야 합니다.
종합 예제 · 안전한 계산기
python
while True:
    try:
        num1 = int(input("첫 번째 숫자 : "))
        num2 = int(input("두 번째 숫자 : "))

        print("나누기 :", num1 / num2)
        break

    except:
        print("입력이 올바르지 않습니다.")

숫자가 아닌 값을 입력하거나 두 번째 숫자에 0을 입력해도(0으로 나누기) 모두 같은 except가 잡아서 "입력이 올바르지 않습니다."를 출력하고, while이 다시 반복되어 처음부터 재입력을 받습니다.

도전 · ValueError와 ZeroDivisionError를 다르게 처리하기

위 "안전한 계산기"에서는 숫자가 아닌 값을 넣든 0을 넣든 똑같이 "입력이 올바르지 않습니다."만 나왔습니다. except를 두 개로 나누면 서로 다른 안내 메시지를 보여줄 수 있어요.

python
try:
    num1 = int(input("첫 번째 숫자 : "))
    num2 = int(input("두 번째 숫자 : "))

    print(num1 / num2)

except ValueError:
    print("숫자만 입력하세요.")

except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")

이렇게 except를 종류별로 나누면 "모든 오류가 같은 것은 아니다"라는 개념까지 자연스럽게 익힐 수 있어요. 문자를 입력하면 ValueError, 0을 입력하면 ZeroDivisionError가 각각 다른 메시지로 처리됩니다.

빈칸 채우기
  1. 오류가 발생할 수 있는 코드를 감싸는 키워드는 입니다.
  2. 오류가 발생했을 때 실행되는 키워드는 입니다.
  3. 숫자가 아닌 값을 입력하면 발생하는 예외의 이름은 입니다.
정답
1. try
2. except
3. ValueError
학교 시험 유형
  1. 다음 코드의 실행 결과를 작성하시오.
    python
    try:
        print(10 / 0)
    except:
        print("오류")
  2. except 뒤에 예외 이름을 붙이는 것과 붙이지 않는 것의 차이를 서술하시오.
정답
1. 오류 — 10 / 0에서 ZeroDivisionError가 발생하므로 try 블록이 중단되고 except가 실행되어 "오류"가 출력됩니다.

2. except 뒤에 예외 이름을 붙이면 그 종류의 오류만 골라서 처리하고, 붙이지 않으면 어떤 종류의 오류든 모두 잡아서 처리합니다.
다음 화 예고 — 다음 화에서는 지금까지 배운 변수와 함수를 하나로 묶는 클래스(Class)를 배웁니다. 나만의 자료형을 직접 설계하는 첫걸음을 파이썬 코드로 다뤄볼게요.
반응형

댓글