파이썬 예외 처리: 실수 없이 코딩하는 법

예외 처리가 중요한 이유

코드를 완벽하게 짜는 건 불가능하지만, 예외 처리를 잘하면 ‘망하는’ 코드는 피할 수 있어요.

안녕하세요, 요즘 파이썬으로 개인 프로젝트를 하나씩 만들어보고 있는 개발자 지망생입니다. 최근에 파일 처리 관련 코드를 짜다가 프로그램이 갑자기 멈춰버리는 일이 있었는데요. 알고 보니 예외 처리를 하지 않아서 생긴 문제였더라고요. 그 일을 계기로 ‘예외 처리’에 대해 다시 공부하게 되었고, 오늘은 그 내용을 여러분과 공유해보려고 해요. 저처럼 작은 실수로 전체 프로그램이 멈추는 일을 방지하고 싶다면, 이 글을 끝까지 읽어보시길 추천드려요!

예외 처리가 중요한 이유

코딩을 하다 보면, 예상치 못한 오류는 늘 따라다니는 그림자 같아요. 사용자가 잘못된 입력을 하거나, 파일이 존재하지 않거나, 네트워크가 끊겼다거나 하는 식의 오류는 언제든 발생할 수 있죠. 이런 예외 상황을 대비하지 않으면 프로그램은 실행 도중에 멈춰버리고, 사용자에게 나쁜 인상을 줄 수 있어요. 예외 처리는 코드의 안정성을 확보하고, 예측 가능한 흐름을 유지하기 위한 최소한의 안전장치입니다.

파이썬 예외 처리 기본 문법

파이썬 예외 처리 기본 문법
파이썬에서 예외 처리는 기본적으로 try-except 구문을 사용합니다. 추가적으로 elsefinally 키워드를 조합해 다양한 흐름을 구성할 수 있어요.
구문 설명
try 예외가 발생할 가능성이 있는 코드를 작성
except 예외가 발생했을 때 실행할 코드
else 예외가 발생하지 않았을 때 실행
finally 예외 발생 여부와 관계없이 항상 실행

자주 발생하는 예외와 대응법

자주 발생하는 예외와 대응법
다음은 파이썬에서 초보자들이 자주 마주치는 예외와 그 해결법이에요. 아래 리스트를 참고해서, 어떤 예외가 어떤 상황에서 발생하는지 감을 잡아보세요.
  • ZeroDivisionError: 숫자를 0으로 나눌 때 발생
  • FileNotFoundError: 존재하지 않는 파일을 열려고 할 때
  • TypeError: 잘못된 자료형을 연산하거나 함수에 전달할 때
  • KeyError: 딕셔너리에서 존재하지 않는 키를 사용할 때

사용자 정의 예외 클래스 만들기

사용자 정의 예외 클래스 만들기
기존에 존재하는 예외로는 부족한 경우, 나만의 예외 클래스를 만들어 사용할 수 있어요. 클래스는 Exception을 상속받아 정의하며, 주로 특정 조건이 만족되지 않을 때 사용자 친화적인 메시지를 출력하기 위해 사용하죠.
class CustomError(Exception):
    def __init__(self, message):
        super().__init__(message)

def validate_age(age):
    if age < 0:
        raise CustomError("나이는 음수가 될 수 없습니다.")

try:
    validate_age(-5)
except CustomError as e:
    print(f"예외 발생: {e}")

예외 처리 실수 피하기 팁

예외 처리 실수 피하기 팁
예외 처리를 한다고 해서 무조건 좋은 코드는 아니에요. 오히려 과도한 예외 처리나 무분별한 사용은 버그를 숨기고 디버깅을 어렵게 만들 수 있답니다. 아래 표는 예외 처리 시 흔히 저지르는 실수와 이를 피하기 위한 팁을 정리한 거예요.
잘못된 예외 처리 더 나은 방법
모든 예외를 except로 잡기 구체적인 예외만 처리하기
except 후에 아무 내용 없이 pass 로그 출력 또는 사용자 안내 메시지 작성
try 범위가 너무 넓음 예외가 발생할 가능성이 높은 코드만 감싸기

마무리 및 요약 정리

마무리 및 요약 정리
지금까지 파이썬의 예외 처리에 대해 기초부터 실전까지 차근차근 알아봤어요. 마무리로, 꼭 기억해야 할 핵심만 요약해드릴게요.
  • 예외 처리는 코드 안정성을 위한 필수 요소
  • try-except 구문은 기본, else와 finally도 적극 활용
  • 자주 발생하는 예외를 미리 인지하고 준비하자
  • 사용자 정의 예외는 코드의 가독성과 유지보수성 향상에 도움
Q 예외 처리를 꼭 해야 하나요?

예외 처리는 프로그램이 비정상적으로 종료되지 않도록 보호하고, 사용자에게 유용한 정보를 제공하기 위해 필수입니다.

A 반드시 필요합니다

코드의 안정성과 사용자 경험을 위해 필수적으로 처리해야 합니다.

Q try-except만 쓰면 충분한가요?

기본적으로는 가능하지만, 필요에 따라 else, finally 블록도 함께 사용하는 것이 좋습니다.

A 상황에 따라 다릅니다

예외 발생 여부와 무관하게 실행할 코드가 있다면 finally 블록을 반드시 활용하세요.

Q except에 Exception만 쓰면 안 되나요?

가능하지만 비추합니다. 구체적인 예외 타입을 명시하는 것이 더 안전합니다.

A 구체적인 예외를 명시하세요

모든 예외를 다 잡다 보면 버그의 원인을 놓치기 쉬워요. TypeError, ValueError 등 구체적으로 작성하는 게 좋아요.

Q finally 블록은 언제 쓰나요?

자원 정리나 로그 기록처럼 예외 발생 여부와 관계없이 실행돼야 할 코드가 있을 때 사용합니다.

A 자원 정리할 때 좋아요

파일 닫기, DB 연결 종료 등은 finally에 넣어두면 확실합니다.

Q raise 키워드는 언제 사용하나요?

직접 예외를 발생시키고 싶을 때 사용합니다. 사용자 정의 예외 처리에도 자주 사용되죠.

A 사용자 정의 예외에 필요해요

필요한 조건에서 직접 에러를 발생시켜야 할 때 raise를 쓰면 좋아요.

Q 예외 메시지를 사용자에게 보여줘도 되나요?

가능은 하지만, 내부 시스템 정보나 스택 트레이스를 노출하지 않도록 주의해야 합니다.

A 조심해서 보여줘야 해요

보안 이슈가 있을 수 있으니 사용자에겐 친절한 메시지를, 로그에는 상세 정보를 남기세요.

여기까지 읽어주셔서 정말 감사해요! 예외 처리라는 게 처음엔 조금 까다롭고 복잡하게 느껴질 수 있지만, 몇 번만 연습해보면 금방 익숙해지거든요. 특히 실전에서 오류 한두 번 겪어보고 나면, “아 이래서 예외 처리가 필요하구나!”하고 절실히 느끼게 되죠. 여러분도 오늘 배운 내용 바탕으로 코딩할 때 조금 더 자신감을 가지셨으면 좋겠어요. 앞으로도 함께 차근차근 성장해가요.

다음 이전