Python 초보자를 위한 try except 전략 – 예외 처리로 디버깅까지 쉽게!

Tux stops at Exception light

Python을 막 배우기 시작했다면, try except 구문을 마주치는 순간 당황하게 됩니다. "무슨 클래스 이름을 외워야 하지?", "이걸 언제 써야 하지?" 같은 고민이 들 수 있죠. 이 글에서는 Python 예외 처리의 핵심 개념과, 초보자를 위한 try except 전략을 차근차근 설명합니다.


왜 Python 예외 처리가 중요한가요?

코드를 실행하다 보면 항상 예상대로 동작하는 건 아닙니다. 사용자가 잘못된 입력을 하거나, 파일이 없거나, 네트워크가 끊기거나... 이럴 때 프로그램이 그대로 멈춰버리면 사용자 경험은 망가지겠죠.

바로 이럴 때 필요한 것이 Python의 예외 처리 (try except) 구문입니다.

예외 처리의 목적은 단 하나: 오류가 나도 프로그램이 안전하게 계속 작동하게 하는 것입니다.


try except는 어떻게 생겼을까?

try:
    # 문제가 생길 수 있는 코드
except 예외클래스 as e:
    # 문제가 생겼을 때 할 일

예:

try:
    result = 10 / 0
except ZeroDivisionError as e:
    print("0으로 나눌 수 없습니다:", e)

여기서 핵심은 ZeroDivisionError라는 예외 클래스입니다. 이 클래스가 바로 어떤 종류의 오류인지 나타내는 '이름표'죠.


예외 클래스란 무엇이고 꼭 외워야 하나요?

많은 Python 초보자들이 이런 질문을 합니다:

"이 많은 예외 클래스, 다 외워야 하나요?"

정답은 아니요!

실제 개발자들도 모든 예외 클래스를 외우지 않습니다. 대신 자주 쓰는 몇 가지 예외 클래스만 익숙해지고, 나머지는 문제가 발생했을 때 에러 메시지를 보고 사용합니다.

예:

FileNotFoundError: [Errno 2] No such file or directory: 'none.txt'

그럼 바로:

except FileNotFoundError:

이렇게 쓰는 거죠.


자주 쓰는 Python 예외 클래스 TOP 7

예외 클래스 언제 발생하나?
ValueError 잘못된 값일 때
TypeError 타입이 안 맞을 때
IndexError 리스트 범위를 벗어날 때
KeyError 딕셔너리에 없는 키일 때
ZeroDivisionError 0으로 나눌 때
FileNotFoundError 파일이 없을 때
Exception 모든 일반 오류의 부모

이 정도만 익혀도 대부분의 Python 예외 처리 상황에 대응할 수 있습니다.


try except, 초보자 전략으로 이렇게 익숙해지세요!

  1. 모르면 일단 Exception으로 감싸세요.
try:
    dangerous_code()
except Exception as e:
    print("문제가 생겼습니다:", e)
  1. 에러 메시지를 보고 필요한 예외 클래스를 구체화하세요.

  2. IDE(코드 에디터)의 자동완성을 믿으세요. 대부분 추천해줍니다.

  3. 같은 문제를 여러 번 겪으면 자연스럽게 익힙니다.


예외 처리는 디버깅의 친구입니다

Python 예외 처리는 단순히 에러를 막는 도구가 아니라, 에러를 추적하고 원인을 찾는 디버깅의 강력한 도구입니다.

예외 메시지는 보통 다음처럼 나옵니다:

Traceback (most recent call last):
  File "main.py", line 2, in <module>
    x = 10 / 0
ZeroDivisionError: division by zero

이걸 보면 파일명, 라인 번호, 오류 타입까지 정확히 알 수 있죠. 따라서 예외 처리를 잘 쓰면 디버깅도 쉬워집니다.


추가 예외 클래스 – StopIteration

StopIteration은 반복 가능한 객체(iterator)가 더 이상 반환할 항목이 없을 때 발생하는 예외입니다. 일반적인 for 루프에서는 자동으로 처리되기 때문에 신경 쓰지 않아도 되지만, next() 함수를 사용할 때는 종종 직접 다뤄야 합니다.

예:

it = iter([1, 2])
print(next(it))  # 1
print(next(it))  # 2
print(next(it))  # StopIteration 발생

혹은 다음과 같은 코드에서:

try:
    category = next(cat for cat in all_categories if cat.slug == category_slug)
except StopIteration:
    pass  # 아무 것도 안 함

이 경우, 해당 slug를 가진 category가 없으면 아무 것도 하지 않고 통과하는 용도로 쓰인 것입니다. 코드 흐름을 멈추지 않기 위한 최소한의 방어라고 볼 수 있습니다.


마무리 – Python 예외 처리, 처음엔 어렵지만 금방 익숙해집니다

처음부터 예외 클래스를 다 외우거나, 완벽한 예외 처리를 할 필요는 없습니다. 대신 문제 상황을 인지하고, try except로 감싸고, 에러 메시지를 분석하는 습관부터 들이세요.

Python 예외 처리는 프로그램을 더 튼튼하게 만들고, 나중에 문제를 찾기도 쉽게 해줍니다. 초보자라면 완벽함보다 실전에서의 생존력이 더 중요합니다. try except는 그 첫걸음이 될 거예요.


다음 편에서는 try except else finally 구조까지 확장된 예외 처리 흐름에 대해서도 설명드릴게요! 😊