IT/Python

[Python] 파이썬 예외 처리와 디버깅 기법

멋진 선배 2025. 1. 10. 05:59
반응형

오늘은 파이썬에서 매우 중요한 주제인 예외 처리와 디버깅 방법에 대해서 알아보도록 하겠습니다.

 

1.예외 처리의 기본 : try-except 구분

파이썬에서 예외 처리의 기본은 try-except 구문입니다. 이 구문을 사용하면 프로그램 실행 중 발생할 수 있는 오류를 우아하게 처리할 수 있습니다.

try :
	# 예외가 발생할 수 있는 코드
    result = 10 / 0
except ZeroDivisionError:
	print("0으로 나눌 수 없습니다")

이 예제에서는 0으로 나누려고 시도하지만, ZeroDivisionError가 발생하면 이를 잡아내고 적절한 메세지를 출력 합니다.

 

2.다양한 예외 처리하기

여러 종류의 예외를 처리하고 싶다면, 여러개의  except 블록을 사용하거나 괄호를 사용하여 여러 예외를 한 번에 처리할 수 있습니다.

try:
	# 예외가 발생할 수 있는 코드
    value = int(input("숫자를 입력하세요: "))
    result = 10 / value
except (ValueError, ZeroDivisionError) as e:
	print(f"오류 발생: {e}")

이 코드는 사용자의 입력 오류(ValueError)와 0으로 나누기 오류(ZeroDivisionError)를 모두 처리 합니다.

 

3.else와 finally 활용하기

try-except 구문에 else와 finally를 추가하면 더 세밀한 제어가 가능합니다. 

실행 결과

try:
    value = int(input("숫자를 입력하세요: "))
    result = 10 / value
except ValueError:
    print("올바른 숫자를 입력하세요.")
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
else:
    print(f"결과: {result}")
finally:
    print("프로그램을 종료합니다.")

else 블록은 예외가 발생하지 않았을 때 실행되고, finally 블록은 예외 발생 여부와 관계없이 항상 실행 됩니다.

 

4.사용자 정의 예외 만들기

특정 상황에 맞는 예외를 직접 정의 할 수 있습니다. 이는 프로그램의 특정 오류 상황을 더 명확하게 표현하는 데 도움이 됩니다.

실행결과

class CustomError(Exception):
    def __init__(self, message):
        self.message = message
        super().__init__(self.message)

try:
    raise CustomError("사용자 정의 예외가 발생했습니다.")
except CustomError as e:
    print(f"발생한 예외 메시지: {e.message}")

이렇게 하면 프로그램의 특정 상황에 맞는 예외를 만들고 처리 할 수 있습니다.

 

5.디버깅 기법 :  print() 함수 활용

가장 기본적인 디버깅 방법은 print() 함수를 사용하여 변수의 값이나 프로그램의 실행 흐름을 확인하는 방법 입니다.

def calculate(a, b):
    print(f"a: {a}, b: {b}")  # 디버깅을 위한 출력
    result = a / b
    print(f"결과: {result}")  # 디버깅을 위한 출력
    return result

calculate(10, 2)

이 방법은 간단하지만, 코드에 많은 print() 문을 추가해야 하고 나중에 이를 제거해야 한다는 단점이 있습니다.

 

6.pdb를 이용한 고급 디버깅

파이썬의 내장 디버거인 pdb를 사용하면 더 강력한 디버깅이 가능 합니다. 

실행결과

import pdb

def complex_function(x, y):
    result = x / y
    pdb.set_trace()  # 디버거 중단점 설정
    return result

complex_function(10, 0)

 

7.IDE를 활용한 디버깅

PyCharm, Visual Studio Code 등의 통합 개발 환경(IDE)은 그래픽 인터페이스를 통해 더 편리한 디버깅 경험을 제공 합니다. 이러단 IDE에서는 중단점 설정, 변수 검사, 단계별 실행 등의 기능을 마우스 클릭만으로 쉽게 사용할 수 있습니다.

8.로깅을 이용한 디버깅

로깅은 프로그램의 실행 상태를 기록하는 방법으로, 디버깅에 매우 중요 합니다. 파이썬의 logging 모듈을 사용하면 다양한 레벨의 로그를 남길 수 있습니다.

실행 결과

import logging

logging.basicConfig(level=logging.DEBUG)

def divide(x, y):
    logging.debug(f"x: {x}, y: {y}")
    try:
        result = x / y
    except ZeroDivisionError:
        logging.error("0으로 나누기 시도")
        raise
    logging.info(f"나눗셈 결과: {result}")
    return result

divide(10, 2)
divide(10, 0)

 

9.traceback 모듈 활용하기

traceback 모듈은 예외 발생 시 상세한 스택 트레이스 정보를 제공 합니다. 이를 통해 예외가 발생한 정확한 위치와 원인을 파악할 수 있습니다.

실행 결과

import traceback

try:
    1 / 0
except Exception as e:
    print("예외 발생:")
    print(traceback.format_exc())

이 코드는 예외가 발생했을 때 상세한 스택 트레이스를 출력 합니다. 이는 복잡한 프로그램에서 문제의 원인을 찾는데 매우 유용 합니다.

 

마무리

예외 처리와 디버깅은 파이썬 프로그래밍에서 매우 중요한 기술 입니다. 이 기술들을 잘 활용하면 더 안정적이고 유지보수가 쉬운 코드를 작성할 수 있습니다. 기본적인  try-except 구문부터 시작하여 pdf, IDE, 로깅, traceback 등 다양한 도구를 활용하여 여러분의 코드를 더욱 견고하게 만들어 보면 좋을 것 같습니다.

 

디버깅은 단순히 오류를 찾는 과정이 아니라, 코드의 동작을 더 깊이 이해하는 과정이기도 합니다. 따라서 디버깅 과정을 통해 여러분이 더 나은 프로그래머로 성장 할 수 있습니다. 

반응형