| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- SpringBoot
- 배열
- Eclipse
- 자바문법
- 테스트자동화
- 단위테스트
- 스프링부트
- 자바스크립트
- CSS
- vscode
- html
- js
- java테스트
- ArrayList
- HashMap
- input
- 정규식
- junit
- 인텔리제이
- 자바
- math
- junit5
- Visual Studio Code
- Array
- 문자열
- list
- IntelliJ
- Java
- javascript
- string
- Today
- Total
어제 오늘 내일
[Python 기초] 14. "에러가 나도 멈추지 않아!" 프로그램 생명 연장, try-except 예외 처리 본문
파이썬이 열심히 코드를 한 줄 한 줄 실행하다가, 도저히 계산할 수 없거나 처리할 수 없는 상황을 마주치면 어떻게 할까요? 파이썬은 즉시 두 손을 들고 파업을 선언합니다. 이것을 우리는 예외(Exception)가 발생했다고 부릅니다.
하지만 실무에서 돌아가는 프로그램이 에러 하나 났다고 픽픽 꺼져버리면 안 되겠죠? 이럴 때 파이썬에게 "에러가 나면 멈추지 말고, 이렇게 대처해!"라고 지시하는 문법이 바로 try-except입니다.
1. 예외(Exception)란 무엇인가요?
문법을 틀려서 발생하는 오타(Syntax Error)와 달리, 문법은 완벽하지만 실행 도중에 발생하는 문제를 예외라고 합니다.
가장 대표적인 예외 상황들을 볼까요?
ZeroDivisionError: 숫자를 0으로 나누려고 할 때ValueError: 숫자로 바꿀 수 없는 문자를int()로 바꾸려고 할 때FileNotFoundError: 없는 파일을open()으로 열려고 할 때
이런 상황을 대비해 안전망을 깔아보겠습니다.
2. 기본 안전망: try-except
사용법은 아주 직관적입니다. 에러가 날 것 같은 불안한 코드를 try 블록(구역) 안에 넣고, 에러가 났을 때 실행할 대안 코드를 except 블록 안에 넣습니다.
📌 예제 코드: 0으로 나누기 방어하기
print("계산기를 켭니다.")
# 1. 에러가 날 수도 있는 코드를 try 안에 넣습니다.
try:
result = 10 / 0 # 숫자를 0으로 나누면 에러가 발생합니다!
print(f"결과는 {result}입니다.") # 위에서 에러가 났으므로 이 줄은 무시됩니다.
# 2. 에러가 발생하면 파이썬이 즉시 except 구역으로 도망쳐 옵니다.
except:
print("앗! 숫자를 0으로 나눌 수는 없습니다.")
# 에러를 안전하게 처리했으므로 프로그램이 죽지 않고 끝까지 실행됩니다!
print("계산기를 끕니다.")
실행 결과:
계산기를 켭니다.
앗! 숫자를 0으로 나눌 수는 없습니다.
계산기를 끕니다.
만약 try-except가 없었다면 프로그램은 10 / 0 부분에서 시뻘건 에러를 뿜어내며 멈췄을 것이고, "계산기를 끕니다"라는 마지막 문장은 영영 출력되지 못했을 것입니다.
3. 에러 종류별로 다르게 대처하기
병원에서도 배가 아픈 환자와 뼈가 부러진 환자의 처방이 다르듯, 에러의 종류에 따라 다른 메시지를 보여줄 수 있습니다. except 뒤에 구체적인 에러 이름을 적어주면 됩니다.
📌 예제 코드: 여러 가지 에러 대처하기
data_list = ["10", "20", "파이썬", "40"]
for item in data_list:
try:
# 문자를 숫자로 바꾸고, 100을 그 숫자로 나눠봅니다.
number = int(item)
print(100 / number)
except ValueError:
# int("파이썬") 처럼 숫자로 바꿀 수 없을 때
print(f"[{item}]은(는) 숫자로 바꿀 수 없는 데이터입니다!")
except ZeroDivisionError:
# 100 / 0 처럼 0으로 나누려 할 때 (위 데이터엔 0이 없지만 예시로 넣음)
print("0으로는 나눌 수 없어요!")
💡 코드 설명:
- "파이썬"이라는 문자를 만났을 때
ValueError가 발생합니다. - 파이썬은 여러 개의
except문을 훑어보다가,ValueError에 해당하는 처방전을 찾아 실행하고 다음 반복으로 부드럽게 넘어갑니다.
4. 에러의 진짜 원인 파악하기 (as e)
에러가 나긴 났는데, 정확히 무슨 에러인지 컴퓨터가 알려주는 메시지를 그대로 보고 싶을 때가 있습니다. (주로 개발자가 디버깅을 할 때 씁니다.)
이때는 except Exception as e라는 마법의 주문을 사용합니다.
📌 예제 코드: 에러 메시지 캡처하기
try:
# 존재하지 않는 파일을 열려고 시도해 봅니다.
with open("ghost_file.txt", "r") as f:
content = f.read()
# 모든 에러(Exception)를 잡아서 그 내용을 변수 'e'에 담습니다.
except Exception as e:
print("오류가 발생했습니다!")
print(f"상세 원인: {e}")
실행 결과:
오류가 발생했습니다!
상세 원인: [Errno 2] No such file or directory: 'ghost_file.txt'
5. 무조건 실행되는 마무리 투수: finally
try 블록에서 에러가 나든 안 나든, 마지막에 무조건 100% 실행되어야 하는 코드가 있을 때 finally를 사용합니다.
주로 데이터베이스(DB) 접속을 끊거나 외부 자원(네트워크 등)을 해제할 때 아주 요긴합니다. (물론 with문을 쓰면 파일은 알아서 닫히지만, 다른 자원에는 여전히 유용합니다.)
📌 예제 코드: 에러 여부와 상관없는 실행 보장
try:
print("은행 시스템에 접속했습니다.")
print("계좌이체를 시작합니다...")
# 강제로 에러를 발생시킵니다!
raise Exception("잔액 부족")
except Exception as e:
print(f"이체 실패: {e}")
finally:
# 이체가 성공하든 실패하든, 시스템 접속은 무조건 끊어야 합니다!
print("은행 시스템 접속을 종료합니다.")
실행 결과:
은행 시스템에 접속했습니다.
계좌이체를 시작합니다...
이체 실패: 잔액 부족
은행 시스템 접속을 종료합니다.
6. 조용히 무시하기: pass
가끔은 크롤링을 하거나 데이터를 분석할 때, 사소한 에러는 그냥 무시하고 넘어가고 싶을 때가 있습니다. 이때는 except 문 안에 파이썬의 pass 키워드 하나만 딸랑 적어두면 됩니다.
try:
# 에러가 날 만한 복잡한 크롤링 작업
print(1 / 0)
except:
# "에러 나도 괜찮아, 아무 일도 없었던 것처럼 그냥 넘어가!"
pass
print("프로그램이 계속 실행됩니다.")
⚠️ 주의: pass를 남용하면 진짜 치명적인 버그가 생겼을 때조차 에러 메시지가 뜨지 않아서, 밤을 새워도 원인을 못 찾는 대참사가 일어날 수 있습니다. 정말 확신할 때만 쓰세요!
📝 마치며
오늘의 핵심 요약입니다.
try: 일단 여기서 에러가 날 수도 있는 코드를 조심스럽게 실행해 본다.except: 만약 위에서 에러가 터지면, 프로그램이 멈추지 않게 이곳의 코드를 실행하며 대처한다.Exception as e: 파이썬이 알려주는 구체적인 에러 원인을e라는 변수에 담아서 출력할 수 있다.finally: 에러가 나든 안 나든 마지막에 무조건 한 번 실행되는 정리 정돈 코드다.pass: 에러를 완전히 무시하고 다음 코드로 부드럽게 넘어가는 키워드다.
이제 여러분의 프로그램은 돌발 상황에서도 꿋꿋하게 살아남을 수 있는 강인한 생명력을 갖게 되었습니다.
지금까지 길고 길었던 파이썬 기초 문법(Phase 1 ~ Phase 5) 과정을 모두 수료하셨습니다. 정말 고생 많으셨습니다! 🎉
하지만 진짜 재미있는 건 지금부터입니다. 우리가 배운 문법들을 조합해서 실생활에 써먹을 수 있는 도구를 만들어봐야죠.
다음 포스팅부터는 Phase 6. 미니 프로젝트의 첫 번째 시간!
"네이버 뉴스 제목 1초 만에 긁어오기" - requests와 BeautifulSoup을 이용한 웹 크롤링 기초에 대해 알아보겠습니다. 드디어 마법 지팡이를 휘두를 시간입니다!
도움이 되셨다면 좋아요와 댓글 부탁드립니다! 🐍
'IT > Python' 카테고리의 다른 글
| [Python 실전] 16. "엑셀 노가다 완벽 해방!" openpyxl로 파이썬에서 엑셀 다루기 (0) | 2026.04.14 |
|---|---|
| [Python 실전] 15. "뉴스 제목 1초 만에 긁어오기" 웹 크롤링 기초 (requests, BeautifulSoup) (0) | 2026.04.13 |
| [Python 기초] 13. "데이터를 내 컴퓨터에 영구 저장하자!" 텍스트 파일과 CSV 읽고 쓰기 (open, with) (1) | 2026.04.12 |
| [Python 기초] 12. "객체지향이긴 한데..." 파이썬 클래스(Class)와 self의 정체 완벽 이해 (0) | 2026.04.12 |
| [Python 기초] 11. "남이 만든 바퀴를 가져다 쓰자!" 파이썬 모듈(import)과 pip 패키지 가이드 (0) | 2026.04.11 |