Summary
pass는 빈칸 채우기,continue는 현재 회차 건너뛰기,break는 반복문 탈출이다try-except-else-finally로 에러를 처리하며,finally는 자원 해제를 무조건 실행한다raise는 비즈니스 로직 위반을 강제로 알리고,assert는 개발자 로직(버그)을 검증한다
흐름 제어
반복문을 제어하는 세 키워드는 영향 범위가 다르다.
| 키워드 | 의미 | 영향 범위 |
|---|---|---|
pass | 빈칸 채우기 | 흐름에 영향 없음(아래 코드 실행 O) |
continue | 건너뛰기 | 현재 회차 중단(아래 코드 실행 X) |
break | 탈출하기 | 반복문 전체 종료 |
pass — 구조 유지 플레이스홀더
pass는 문법 오류를 피하기 위한 빈칸으로, 기능적으로 아무것도 하지 않는다. 파이썬은 들여쓰기로 블록을 구분하기 때문에, if나 함수 정의 아래에 아무 코드도 없으면 IndentationError가 난다. 이때 “아무것도 안 하지만 문법 오류는 내지 마”라고 알리는 것이 pass다.
# 스켈레톤 코드
class DataPipeline:
def extract(self):
pass # TODO: 추후 구현
# 예외 무시
try:
os.remove("temp_file.txt")
except FileNotFoundError:
pass # 파일이 없으면 그냥 둠continue — 결측치/오류 스킵
현재 아이템 처리를 중단하고 다음 회차로 넘어간다. 잘못된 로그나 결측 데이터를 건너뛸 때 쓴다.
raw_logs = ["INFO: User logged in", "", "ERROR: Connection failed"]
for log in raw_logs:
if not log.strip(): # 빈 줄이면
continue # 다음 로그로
print(f"Parsing: {log}")break — 조기 종료
반복문 자체를 완전히 종료한다. 원하는 데이터를 찾았거나 폴링 중 성공 응답을 받았을 때 쓴다.
for i in range(max_retries):
if check_server_status() == 200:
print(f"서버 준비 완료 (시도: {i+1})")
break
time.sleep(1)
else:
# break 없이 루프가 끝까지 돌면 실행 (Python 고유 문법)
print("서버 연결 시간 초과")예외 처리
try-except-else-finally
단순히 에러를 잡는 것을 넘어 자원 누수를 방지하는 패턴이다.
try: 에러 발생 가능성이 있는 로직except: 에러 발생 시 대응(로깅, 롤백)else: 에러 없이 성공했을 때만 실행finally: 무조건 실행(DB 연결 종료, 파일 닫기)
db_connection = None
try:
db_connection = connect_to_database()
data = db_connection.query("SELECT * FROM users")
except ConnectionError as e:
print(f"DB 연결 에러: {e}")
else:
print(f"데이터 조회 완료: {len(data)}건")
finally:
if db_connection:
db_connection.close()
print("DB 연결 해제됨")능동적 에러 제어
raise — 비즈니스 로직 강제
문법적으로는 맞지만 로직상 허용하면 안 되는 값이 들어왔을 때, 개발자가 직접 에러를 발생시킨다.
def calculate_metrics(df):
if 'price' not in df.columns:
raise ValueError("필수 컬럼 누락: 'price' 컬럼이 없습니다.")
return df['price'].mean()assert — 단언 및 디버깅
“이 시점에는 데이터가 무조건 이 상태여야 한다”고 선언한다. 데이터의 형태나 분포가 예상과 맞는지 검증할 때 쓴다.
assert len(train) + len(test) == total_count, "데이터 누실 발생!"if 대신 assert를 쓰는 이유
| 구분 | if + raise | assert |
|---|---|---|
| 대상 | 사용자 입력, 외부 환경(파일/네트워크) | 개발자 로직 검증(내부 버그) |
| 배포 시 | 실행됨(필수 로직) | 삭제 가능(-O 옵션 사용 시) |
| 의미 | ”에러가 나면 처리해줘" | "이게 틀리면 내 코드는 버그야” |
assert는 실행 시 최적화 옵션(-O)을 주면 컴파일 과정에서 삭제된다. 개발 단계에서는 꼼꼼히 검사하고 배포 시에는 성능 저하 없이 실행할 수 있다.
보안 로직에 assert 금지
assert는 배포 시 삭제될 수 있으므로, 비밀번호 확인이나 권한 체크 같은 보안 로직에는 절대 쓰면 안 된다.
Reference