본문 바로가기
Python

Python 기초 #5: 예외 처리와 디버깅

by My Course 2025. 5. 8.

"오류에 강한 로봇이 진짜 똑똑한 로봇이다"

  • try, except, finally 구조
  • raise로 직접 예외 발생시키기
  • 자율주행 시스템에서 자주 발생하는 오류 예시
  • 안전하고 유연한 코드 만들기

1. 예외(Exception)란?

예외란 "프로그램 실행 중 예상치 못한 오류"를 말합니다.

예:

  • 센서 연결이 끊겼을 때
  • 값을 0으로 나눌 때
  • 잘못된 파일을 열려고 할 때

이런 문제를 처리하지 않으면 프로그램이 강제 종료됩니다.


2. try - except로 오류를 잡아내자

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

출력:

 
0으로 나눌 수 없습니다!

파일 오류 예시

try:
    with open("없는파일.txt", "r") as f:
        content = f.read()
except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")

3. finally: 무조건 실행되는 블록

finally는 오류 발생 여부와 상관없이 마지막에 꼭 실행되는 코드입니다.

try:
    print("로봇 작동 시작")
    x = 1 / 0
except:
    print("문제가 발생했습니다.")
finally:
    print("모터 전원을 종료합니다.")

4. raise: 내가 직접 오류를 발생시킨다

센서 값이 너무 이상하면 일부러 예외를 발생시켜 경고를 줄 수 있습니다.

def read_distance(sensor_value):
    if sensor_value < 0:
        raise ValueError("센서 값이 음수일 수 없습니다!")
    return sensor_value

try:
    d = read_distance(-10)
except ValueError as e:
    print("오류 발생:", e)

 


실전 예제: 센서 수신 실패 대비

import random

try:
    distance = random.choice([45, 50, None])  # None이면 센서 오류
    if distance is None:
        raise ConnectionError("센서로부터 값을 받지 못했습니다.")
    print("측정 거리:", distance, "cm")

except ConnectionError as e:
    print("예외 처리:", e)

디버깅 팁: print() 말고 traceback도 써보자

python
복사편집
import traceback try: 1 / 0 except: traceback.print_exc()
import traceback

try:
    1 / 0
except:
    traceback.print_exc()

이건 어디서 오류가 났는지 파일명, 줄 번호, 메시지까지 자세히 출력해줍니다.


정리

키워드설명예시
try 예외 발생 가능 코드 try: x = 1 / 0
except 예외 발생 시 처리 except ZeroDivisionError:
finally 무조건 실행 finally: 정리 작업
raise 직접 예외 발생 raise ValueError(...)