"오류에 강한 로봇이 진짜 똑똑한 로봇이다"
- 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(...) |
'Python' 카테고리의 다른 글
| Python 기초 #4: 파일 입출력 & 데이터 처리 (0) | 2025.05.07 |
|---|---|
| Python 기초 #3: 함수와 모듈 (1) | 2025.05.04 |
| Python 기초 #2: 조건문과 반복문 (0) | 2025.05.04 |
| Python 기초 #1: Hello World부터 시작하기 (0) | 2025.05.03 |
| Python 기초부터 자율주행까지 (0) | 2025.05.03 |