파이썬 try except 문, 코딩 에러 종류, 프로그램 강제 종료 방지, 예외 처리 예시, 런타임 에러 대책
완벽한 논리로 조건문, 반복문, 함수까지 결합하여 나만의 멋진 가계부나 프로그램을 완성했습니다. 내 컴퓨터에서는 아무런 문제 없이 작동하는 것을 확인하고 뿌듯한 마음으로 친구나 직장 동료에게 프로그램을 배포합니다. 하지만 얼마 지나지 않아 "프로그램이 작동하다가 갑자기 툭 꺼져버려!"라는 항의 섞인 피드백을 받게 됩니다. 원인을 분석해 보니, 숫자를 입력하라고 만든 칸에 사용자가 실수로 '오천원' 같은 글자를 입력했거나, 나누기 계산을 할 때 분모에 숫자 0을 넣는 등 개발자가 미처 예상하지 못한 돌발 상황이 발생한 것입니다.
이처럼 문법은 완벽하지만 프로그램이 실행되는 도중에 발생하는 예기치 못한 에러를 프로그래밍 세계에서는 '예외(Exception) 혹은 런타임 에러'라고 부릅니다. 엑셀에서 수식 결과가 깨지면 #VALUE! 같은 에러 메시지만 보여주고 멈추지만, 파이썬은 사소한 예외 하나만 발생해도 전체 프로그램이 그 즉시 비명을 지르며 강제로 폭사(종료)해 버립니다. 오늘은 프로그램이 어떤 돌발 상황에서도 꺼지지 않고 유연하게 버틸 수 있도록 방어막을 쳐주는 'try-except 예외 처리' 기술을 알아보겠습니다.
1. 흔히 만나는 파이썬의 대표적인 3대 에러
예외 처리를 배우기 전, 우리가 코딩하면서 가장 자주 마주치게 되는 단골 에러 비주얼들을 먼저 눈에 익혀두는 것이 좋습니다.
ValueError(값 오류): 자료형은 맞지만 값이 부적절할 때 발생합니다. 예를 들어 글자"오백"을 숫자로 강제 변환(int("오백"))하려고 할 때 파이썬이 거품을 물고 내뱉는 에러입니다.ZeroDivisionError(0 나누기 오류): 수학적 대원칙을 위반했을 때입니다. 어떤 숫자를0으로 나누려고 하면(10 / 0) 발생합니다.IndexError(인덱스 범위 오류): 5편에서 배운 리스트 칸을 넘어섰을 때입니다. 알맹이가 3개밖에 없는 리스트에서 존재하지도 않는 100번째 칸(list[100])을 꺼내라고 명령하면 발생합니다.
2. 안전망 설치하기: try-except 기본 공식
이러한 돌발 에러 때문에 프로그램이 공중 분해되는 것을 막기 위해 파이썬은 try-except라는 아주 강력한 예외 처리 문법을 제공합니다.
일상생활에 비유하자면 "일단 이 코드를 실행해 보고(try), 만약 에러가 나면 프로그램 끄지 말고 내가 준비한 플랜B 코드로 대처해라(except)"라는 의미의 안전장치입니다.
try:
# 에러가 발생할 가능성이 있는 위험한 코드
number = int(input("숫자를 입력하세요: "))
result = 10 / number
print(f"계산 결과: {result}")
except:
# 에러가 발생했을 때 프로그램 종료 대신 실행할 플랜B 코드
print("⚠ 에러 발생! 올바른 숫자를 입력했는지, 혹은 0을 입력하지 않았는지 확인하세요.")
print("프로그램이 정상적으로 계속 실행됩니다.")
try:내부: 사용자가 정상적으로 숫자2를 입력하면 아무런 문제 없이 계산 결과(5.0)를 출력하고except구간은 쳐다보지도 않은 채 유유히 빠져나갑니다.except:내부: 만약 사용자가 실수로 글자"삼"을 입력하거나 숫자0을 입력하는 순간,try내부 코드는 즉시 실행을 중단하고 마치 순간 이동을 하듯except칸으로 떨어집니다. 덕분에 화면에는 붉은색 에러 메시지 대신 우리가 준비한 친절한 안내 문구가 출력되며, 맨 아래 줄의 "프로그램이 정상적으로 계속 실행됩니다"라는 문장까지 안전하게 도달하게 됩니다.
3. 에러별로 맞춤형 처방전 작성하기
위의 기본 except:는 어떤 에러가 나든 똑같은 대처만 해줍니다. 하지만 능력 있는 개발자라면 사용자가 숫자를 잘못 넣었을 때와 0을 넣었을 때 각각 다른 친절한 경고창을 띄워주고 싶을 것입니다. 이때 에러의 이름을 except 뒤에 명시해 주면 맞춤형 처방이 가능합니다.
try:
num = int(input("분모에 넣을 숫자: "))
print(10 / num)
except ValueError:
print("글자가 아닌 '숫자'를 정확하게 입력해 주세요.")
except ZeroDivisionError:
print("숫자 '0'으로는 나눗셈을 할 수 없습니다.")
이렇게 짜두면 파이썬은 에러의 종류를 판별하여 글자를 입력했을 때는 첫 번째 except 문을, 0을 입력했을 때는 두 번째 except 문을 찰떡같이 찾아가 실행해 줍니다.
[핵심 요약 3줄]
프로그램 실행 중에 발생하는 돌발 에러(ValueError, ZeroDivisionError 등)는 예외 처리를 하지 않으면 프로그램을 강제로 종료시키는 원인이 된다.
try-except문을 활용하면 위험한 코드를try블록에 가두고, 에러 발생 시except블록의 플랜B 코드를 실행하여 프로그램의 연속성을 유지할 수 있다.except 에러이름:형태로 에러의 종류를 명시해 주면, 발생한 문제의 원인에 따라 각기 다른 맞춤형 안내와 대처 로직을 수행할 수 있다.
0 댓글