파이썬으로 코드를 작성하고 실행할 때, 화면에 빨간색 에러 메시지(Traceback)가 뜨며 프로그램이 그대로 멈춰버린 경험은 누구나 가지고 있습니다. 혼자 연습할 때는 다시 실행하면 그만이지만, 실제로 사용자가 이용하는 프로그램이나 매일 자동으로 돌아가는 크롤러·자동화 프로그램이 작은 오류 하나 때문에 중간에 멈춰버린다면 매우 곤란해집니다.
특히 입문자 시절에는 "내가 코드를 잘못 짜서 컴퓨터가 고장 난 건 아닌가" 하는 두려움을 느끼기도 합니다. 하지만 프로그래밍에서 에러는 자연스러운 현상이며, 중요한 것은 에러가 발생했을 때 프로그램이 튕기지 않고 안전하게 우회하도록 만드는 '예외 처리(Exception Handling)' 기술입니다. 오늘은 프로그램의 안정성을 획기적으로 높여주는 try-except 구문의 핵심과 실전 활용법을 정리해 드립니다.
1. 예외(Exception)와 에러를 대비해야 하는 이유
프로그램이 정지하는 이유는 다양합니다. 사용자가 숫자를 입력해야 하는 칸에 글자를 넣거나, 인터넷 연결이 잠시 끊기거나, 읽어와야 할 텍스트 파일이 지정된 폴더에 없는 경우 등 개발자가 통제할 수 없는 외부 요인이 항상 존재합니다.
이러한 예외 상황을 미리 대비해두지 않으면 파이썬은 즉시 실행을 중단합니다. 하지만 try-except 구문을 사용하면 에러가 발생하더라도 "이런 에러가 나면 이렇게 대처하고 계속 진행해라" 하고 컴퓨터에 안내 지침을 내려줄 수 있습니다.
2. try-except 기본 구조와 작동 원리
try-except 구문의 가장 기본적이고 직관적인 구조는 다음과 같습니다.
try:
# 에러가 발생할 가능성이 있는 코드
age = int(input("나이를 숫자로 입력하세요: "))
print(f"입력하신 나이는 {age}세입니다.")
except ValueError:
# ValueError가 발생했을 때 대체하여 실행할 코드
print("문자가 아닌 올바른 숫자를 입력하셔야 합니다.")
print("프로그램이 종료되지 않고 다음 로직을 계속 실행합니다.")
try블록: 위험성이 있는 코드를 감싸둡니다. 파이썬은 이 구간을 실행하면서 에러가 터지는지 감시합니다.except블록:try내부에서 지정한 에러(예:ValueError)가 발생하는 즉시 실행을 멈추고 이쪽으로 이동합니다. 프로그램을 강제 종료하는 대신 준비된 안내 문구를 보여주고 아래쪽 코드로 자연스럽게 이어집니다.
3. 다중 except와 else, finally로 완벽한 방어막 구축하기
실무에서는 하나의 코드 블록에서 여러 종류의 에러가 발생할 수 있습니다. 이때는 except를 여러 개 이어 붙이거나, else와 finally를 조합해 훨씬 탄탄한 구조를 만들 수 있습니다.
1) 다중 except로 에러별 맞춤 대처
try:
numbers = [1, 2, 3]
idx = int(input("인덱스 번호를 입력하세요: "))
print(10 / numbers[idx])
except IndexError:
print("리스트 범위를 벗어난 번호입니다.")
except ZeroDivisionError:
print("0으로 나누는 계산은 할 수 없습니다.")
except ValueError:
print("정수 숫자만 입력해 주세요.")
입력값에 따라 리스트 범위를 넘어섰는지(IndexError), 0으로 나누었는지(ZeroDivisionError), 문자열을 넣었는지(ValueError)에 따라 각각 다른 해결책이나 안내를 제공할 수 있습니다.
2) else와 finally 활용하기
else:try블록에서 에러가 전혀 발생하지 않고 정상적으로 끝났을 때만 실행됩니다.finally: 에러 발생 여부와 상관없이 무조건 마지막에 실행되는 구문입니다.
try:
file = open("data.txt", "r", encoding="utf-8")
except FileNotFoundError:
print("파일을 찾을 수 없습니다. 경로를 확인하세요.")
else:
content = file.read()
print("파일 내용 읽기 완료")
file.close()
finally:
print("데이터 처리 프로세스를 마칩니다.")
특히 finally는 파일 닫기(close())나 데이터베이스 연결 해제처럼 작업이 성공하든 실패하든 반드시 수행해야 하는 뒷정리 코드에 필수적으로 사용됩니다.
4. 예외 처리 작성 시 초보자가 주의해야 할 실수
try-except 구문을 배운 초보자들이 흔히 하는 실수는 어떤 에러가 나는지 명시하지 않고 무작정 아래처럼 작성하는 것입니다.
# [주의] 어떤 에러인지 명시하지 않은 위험한 예외 처리
try:
# 복잡한 로직...
except:
print("알 수 없는 에러가 발생했습니다.")
이렇게 에러 이름을 생략하고 except:만 쓰면, 사용자의 단순 입력 실수뿐만 아니라 변수 오타나 개발자의 논리적 버그까지 전부 숨겨버립니다. 이 경우 어디서 무슨 이유로 코드가 잘못되었는지 추적하기가 매우 어려워집니다.
따라서 예외 처리를 할 때는 반드시 except ValueError:나 except FileNotFoundError:처럼 예상되는 에러의 명칭을 구체적으로 적어주는 습관을 들여야 안전합니다.
핵심요약
try-except구문은 예외 상황이 발생해도 프로그램이 강제 종료(다운)되지 않고 준비된 대체 코드를 실행하도록 돕습니다.else는 에러가 없을 때만 실행되며,finally는 에러 유무와 상관없이 무조건 실행되어 뒷정리 작업에 적합합니다.단순
except:로 모든 에러를 무분별하게 감싸면 코드 내부의 진짜 버그를 찾기 어려워지므로 에러명을 구체적으로 명시해야 합니다.


0 댓글