예외 처리(Exception) — 오류가 나도 멈추지 않는 프로그램
지금까지는 프로그램이 실행 중 오류를 만나면 그 자리에서 에러와 함께 바로 종료됐습니다. 이번에는 오류가 나도 프로그램이 멈추지 않고 계속 실행되도록 만드는 try·except 문법을 배웁니다.
요즘은 고등학교에서도 코딩을 정규 과목으로 가르치는 시대입니다. 전공자가 아니어도 바이브 코딩(Vibe Coding)이나 생성형 AI(Generative AI)를 활용하면 누구나 그럴듯한 코드 결과물을 만들어낼 수 있게 되었죠.
개발 언어를 접하는, 전공자가 아닌 일반인 입문자가 많아진 것입니다.
이 시리즈는 글쓴이가 실제로 일반인, 고등학생 등 비전공자·입문자에게 파이썬을 가르치면서 정리한 내용들을 교재 형식으로 엮은 글입니다.최대한 쉽고 친절하게 설명하면서도, 컴퓨터와 프로그래밍 언어에 대한 기초 이론까지 함께 짚고 넘어가려 합니다.
고등학생, 비전공자, 완전 입문자도 따라올 수 있게끔 만든 시리즈이고, 실제 과외 수업 자료를 바탕으로 만들어서 학교 시험처럼 개념 확인 문제도 그대로 들어있어요.
중간중간 빈칸 채우기랑 학교 시험 유형 문제가 나오는데, 정답은 바로 안 보이게 접어뒀습니다. 먼저 스스로 생각해본 다음 "보기"를 눌러서 확인해보세요.

프로그램을 실행하다 보면 여러 가지 오류가 발생할 수 있습니다. 예를 들어 숫자를 입력해야 하는데 문자를 입력하거나, 없는 파일을 읽으려고 하는 경우예요. 이런 오류를 예외(Exception)라고 합니다. 예외가 발생하면 프로그램은 바로 종료됩니다. 예외 처리를 사용하면 프로그램이 종료되지 않고 계속 실행할 수 있어요.
자전거를 타다가 돌을 만나면 멈춰 버릴 수도 있습니다. 하지만 돌을 피해 가면 계속 갈 수 있어요. 예외 처리도 같습니다. 오류가 발생해도 프로그램을 계속 실행하도록 만드는 것이 예외 처리예요.
print(num)
ValueError: invalid literal for int() with base 10: 'abc'
입력으로 "abc"처럼 숫자가 아닌 문자를 넣으면 int("abc")가 실행되는 순간 ValueError라는 예외가 발생하고, 프로그램이 그 자리에서 바로 종료됩니다.
실행할 코드
except:
오류가 발생했을 때 실행할 코드
try 블록 안의 코드를 실행하다가 오류가 발생하면, 그 즉시 실행을 멈추고 except 블록으로 넘어갑니다. 오류가 없다면 except 블록은 아예 실행되지 않아요.
num = int(input("숫자 입력 : "))
print(num)
except:
print("숫자를 입력하세요.")
숫자를 입력하세요.
이번에는 오류가 발생해도 프로그램이 종료되지 않고, except 블록의 안내 메시지를 출력한 뒤 정상적으로 다음 코드를 계속 실행합니다.
print(10 + 20)
except:
print("오류 발생")
10 + 20은 오류 없이 정상적으로 계산되므로, except는 실행되지 않고 무시됩니다.
open("test.txt","r")에서 파일이 없으면 오류가 나지만, try로 감싸면 "파일이 존재하지 않습니다."를 출력하고 계속 진행합니다.
10 / 0은 ZeroDivisionError를 일으키지만, try로 감싸면 "0으로 나눌 수 없습니다."를 출력하고 계속 진행합니다.
try:
num = int(input("숫자 입력 : "))
break
except:
print("숫자를 입력하세요.")
숫자가 아닌 값을 입력하면 except가 실행되고, while이 다시 처음으로 돌아가 재입력을 요청합니다. 올바른 숫자를 입력해야만 break로 반복문을 빠져나가요. 실무에서도 자주 사용하는 패턴입니다.
모든 오류를 except: 하나로 처리할 수도 있지만, 오류의 종류를 구분해서 각각 다르게 처리할 수도 있어요.
num = int(input())
except ValueError:
print("숫자를 입력하세요.")
except ValueError:처럼 예외 이름을 지정하면, 그 종류의 오류일 때만 이 except가 실행돼요. 다른 종류의 오류라면 잡히지 않고 그대로 프로그램이 종료됩니다.
- try만 작성 (except 없음) —
except가 반드시 필요합니다. try만 단독으로 쓸 수는 없어요. - 들여쓰기를 하지 않는 경우 — try 블록 안의 코드는 반드시 들여쓰기해야 합니다.
- try 밖에서 오류가 발생하는 경우 —
num = int(input())을 try 밖에 두면, 오류가 이미 try 이전에 발생해서 예외 처리가 동작하지 않아요. 오류가 날 수 있는 코드는 반드시try안에 넣어야 합니다.
try:
num1 = int(input("첫 번째 숫자 : "))
num2 = int(input("두 번째 숫자 : "))
print("나누기 :", num1 / num2)
break
except:
print("입력이 올바르지 않습니다.")
숫자가 아닌 값을 입력하거나 두 번째 숫자에 0을 입력해도(0으로 나누기) 모두 같은 except가 잡아서 "입력이 올바르지 않습니다."를 출력하고, while이 다시 반복되어 처음부터 재입력을 받습니다.
위 "안전한 계산기"에서는 숫자가 아닌 값을 넣든 0을 넣든 똑같이 "입력이 올바르지 않습니다."만 나왔습니다. except를 두 개로 나누면 서로 다른 안내 메시지를 보여줄 수 있어요.
num1 = int(input("첫 번째 숫자 : "))
num2 = int(input("두 번째 숫자 : "))
print(num1 / num2)
except ValueError:
print("숫자만 입력하세요.")
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
이렇게 except를 종류별로 나누면 "모든 오류가 같은 것은 아니다"라는 개념까지 자연스럽게 익힐 수 있어요. 문자를 입력하면 ValueError, 0을 입력하면 ZeroDivisionError가 각각 다른 메시지로 처리됩니다.
- 오류가 발생할 수 있는 코드를 감싸는 키워드는 입니다.
- 오류가 발생했을 때 실행되는 키워드는 입니다.
- 숫자가 아닌 값을 입력하면 발생하는 예외의 이름은 입니다.
정답
2. except
3. ValueError
- 다음 코드의 실행 결과를 작성하시오.
try:
print(10 / 0)
except:
print("오류") except뒤에 예외 이름을 붙이는 것과 붙이지 않는 것의 차이를 서술하시오.
정답
2. except 뒤에 예외 이름을 붙이면 그 종류의 오류만 골라서 처리하고, 붙이지 않으면 어떤 종류의 오류든 모두 잡아서 처리합니다.
'Language > Python' 카테고리의 다른 글
| [고등학생부터, 파이썬] 21. 생성자 (__init__) 와 메서드 (Method) (0) | 2026.09.14 |
|---|---|
| [고등학생부터, 파이썬] 20. 클래스 (Class) (0) | 2026.09.14 |
| [고등학생부터, 파이썬] 18. 파일 입출력 (1) | 2026.09.04 |
| [고등학생부터, 파이썬] 17. 모듈 ( + random , math, datetime ) (0) | 2026.09.04 |
| [고등학생부터, 파이썬] 16. 함수 종합 프로젝트 (0) | 2026.09.01 |
댓글