파이썬 예외처리, try except로 오류 잡는 법
지난 글에서 파일 읽기를 연습하다가, 파일 이름을 살짝 잘못 적은 적 있으시죠. 그 순간 화면이 빨간 글자로 뒤덮이면서 FileNotFoundError가 떴을 거예요.
처음엔 그게 진짜 당황스럽거든요. 코드를 다 맞게 짠 것 같은데 빨간 메시지가 좌악 뜨면, "내가 또 뭘 잘못했지?" 싶고요.
그런데 사실 저런 빨간 글자, 꼭 여러분 잘못이 아닐 때가 더 많아요.
파이썬 오류는 왜 생길까요
프로그램은 보통 위에서 아래로 한 줄씩 실행돼요. 그런데 가끔 예상 못한 상황을 만나면 거기서 멈춰버려요. 없는 파일을 열려고 했다거나, 0으로 나누려고 했다거나, 사용자가 숫자 칸에 글자를 넣었다거나요.
이런 걸 예외(Exception) 라고 부릅니다. 에러랑 거의 같은 말이에요.
print("프로그램 시작") # 이건 잘 출력됨
숫자 = 10 / 0 # 여기서 ZeroDivisionError 발생
print("프로그램 끝") # 이 줄은 영영 실행 안 됨
실행 결과:
프로그램 시작
ZeroDivisionError: division by zero
보세요. 마지막 줄은 영원히 못 봐요. 한 번 에러가 나면 그 뒤는 통째로 날아가는 거죠.
try except, 코드용 우산이라고 생각하세요
밖에 나갈 때 비가 올지 안 올지 모르면 우산을 챙기잖아요. 안 오면 안 펴면 되고, 오면 펴면 되고요.
try/except도 똑같아요. "여기서 에러 날 수도 있는데, 만약 나면 이렇게 대처해줘" 하고 미리 우산을 챙겨두는 거예요.
print("프로그램 시작")
try:
숫자 = 10 / 0 # 에러가 날 수도 있는 줄
except ZeroDivisionError:
print("0으로 나눌 수 없어요") # 에러가 나면 여기 실행
print("프로그램 끝") # 이번엔 정상 출력!
실행 결과:
프로그램 시작
0으로 나눌 수 없어요
프로그램 끝
프로그램이 안 죽고 끝까지 갔어요. 이게 핵심이에요.
python try except 기본 문법
구조는 이렇게 생겼어요.
try:
위험한_코드
except 예외종류:
대처할_코드
try 블록 안에서 에러가 나면 except 쪽으로 점프하고, 에러가 안 나면 except는 그냥 건너뜁니다. 어느 쪽이든 프로그램은 계속 굴러가요.
except 뒤에 예외 종류, 꼭 적어주세요
이 부분이 진짜 중요한데요. 가끔 이렇게 쓰는 분들이 있어요.
try:
위험한_코드()
except: # 모든 에러를 다 잡아버림
pass
편해 보이지만 정말 위험한 습관이에요. 화재경보기를 통째로 꺼버리는 거랑 똑같거든요. 작은 불도, 큰 불도 다 모르게 돼요.
나중에 진짜 심각한 버그가 났을 때 어디서 뭐가 잘못됐는지 추적이 안 돼요. 꼭 잡고 싶은 예외 이름을 정확히 적어주세요. 이 습관 하나가 나중에 디버깅 지옥에서 여러분을 구해줍니다.
try:
숫자 = int("스물") # ValueError 발생
except ValueError as e:
print(f"문제가 생겼어요: {e}")
실행 결과:
문제가 생겼어요: invalid literal for int() with base 10: '스물'
as e를 쓰면 에러 메시지를 받아볼 수 있어요. 디버깅할 때 정말 유용합니다.
자주 만나는 파이썬 오류 종류
초보자가 자주 만나는 예외만 모아봤어요.
ValueError: 값 형식이 안 맞을 때 (int("hello"))TypeError: 타입이 안 맞을 때 ("5" + 3)ZeroDivisionError: 0으로 나눌 때FileNotFoundError: 파일이 없을 때KeyError: 딕셔너리에 그 키가 없을 때IndexError: 리스트 범위를 벗어났을 때
여러 예외를 한 번에 처리하기
except를 여러 개 이어 쓸 수 있어요.
try:
a = int(input("위 숫자: "))
b = int(input("아래 숫자: "))
print(f"결과: {a / b}")
except ValueError:
print("숫자만 입력해 주세요")
except ZeroDivisionError:
print("0으로는 나눌 수 없어요")
상황에 따라 다른 메시지를 보여줄 수 있어서 사용자한테 훨씬 친절해지죠.
finally는 무조건 실행되는 마무리
finally는 에러가 나든 안 나든 무조건 실행되는 블록이에요.
try:
파일 = open("data.txt")
내용 = 파일.read()
except FileNotFoundError:
print("파일이 없어요")
finally:
print("어쨌든 이건 실행됨")
주로 자원 정리(파일 닫기 같은 것)에 씁니다. 사실 파일은 with문이 더 편하긴 한데, "이런 게 있다" 정도만 알아두시면 돼요.
실용 패턴: 안전하게 숫자 입력받기
실제로 정말 자주 쓰는 패턴이에요.
def 정수_입력받기(질문):
while True:
try:
return int(input(질문)) # 성공하면 함수 종료
except ValueError:
print("숫자만 입력해 주세요. 다시!")
나이 = 정수_입력받기("나이를 입력하세요: ")
print(f"{나이}살이시군요")
사용자가 "스물"이라고 적든, 빈 칸으로 엔터를 치든, 프로그램이 안 죽고 다시 물어봐요. 이거 한 번 만들어두면 어디서나 가져다 쓸 수 있습니다.
실습: 안전한 나눗셈 계산기
직접 한번 만들어 보세요.
while True:
try:
a = int(input("위 숫자: "))
b = int(input("아래 숫자: "))
print(f"결과: {a / b}")
break # 성공하면 반복 종료
except ValueError:
print("숫자만 입력하세요. 다시 해볼게요.")
except ZeroDivisionError:
print("0으로는 나눌 수 없어요. 다시 해볼게요.")
글자를 넣어도, 0을 넣어도 절대 안 죽는 계산기예요. 직접 돌려보시면서 일부러 이상한 값을 넣어보세요. 안 죽는 게 신기하실 거예요.
에러는 여러분 잘못이 아니에요. 사용자가 이상한 값을 넣을 수도 있고, 파일이 갑자기 사라질 수도 있고요. 그런 상황을 미리 예상하고 대비해두는 게 진짜 실력입니다.
이제 입력도 안전하게 받을 줄 알게 됐으니, 다음에는 지금까지 배운 걸 다 합쳐서 진짜 작은 프로그램 하나를 만들어볼 거예요. 간단한 계산기인데, 여러분이 직접 손대서 키워볼 수 있는 첫 미니 프로젝트가 될 거예요.
제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀
'Application > Python' 카테고리의 다른 글
| [Python] 파이썬 클래스, 객체지향이란 무엇일까 (0) | 2026.05.08 |
|---|---|
| [Python] 파이썬 계산기 만들기 (첫 미니 프로젝트) (0) | 2026.05.07 |
| [Python] 파이썬 파일 읽기와 쓰기: open, read, write 한 번에 정리 (0) | 2026.05.04 |
| [Python] 파이썬 모듈과 import 사용법, 남이 만든 도구 가져다 쓰기 (0) | 2026.04.30 |
| [Python] 파이썬 함수 심화 - 매개변수와 기본값 한 번에 정리 (0) | 2026.04.28 |