이 게시글은 혼공학습단(혼공파) 13기의 5주차 과제를 포함하고 있습니다.
어떤 언어로든 프로그래밍을 하다 보면 구문 오류(SyntaxError)와 예외(Exception)를 자주 만나게 됩니다. 이 둘은 모두 코드 실행을 멈추게 만들지만, 발생 원인과 처리 방식이 다릅니다. 이번 글에서는 구문 오류와 예외의 차이를 이해하고, 이를 효과적으로 처리하는 방법을 살펴보겠습니다.
1. 구문 오류(SyntaxError)란?
구문 오류(SyntaxError)는 코드가 문법적으로 올바르지 않을 때 발생하는 오류입니다. 파이썬 인터프리터는 실행 전에 구문 분석(parsing) 과정을 거치는데, 이때 문법에 맞지 않는 코드가 발견되면 SyntaxError가 발생하며 실행이 중단됩니다. 주로 IDE의 코드 빨간줄인 경우 구문 오류 입니다.
주요 구문 오류 종류
- SyntaxError: 문법 오류
- IndentationError: 들여쓰기 오류
- TabError: 탭과 공백 혼용 오류
- EOL while scanning string literal: 문자열 리터럴이 닫히지 않았을 때 발생
- Unexpected character after line continuation character: 줄바꿈 문자(\) 이후 잘못된 문자가 올 때 발생
- Invalid syntax: 잘못된 문법 구조 사용 시 발생
2. 예외(Exception)란?
예외(Exception)는 코드가 문법적으로는 올바르지만, 실행 도중 발생하는 오류입니다. 예를 들어, 0으로 나누거나 존재하지 않는 파일을 열려고 하면 예외가 발생합니다. 하지만 예외는 try-except 문을 사용해 적절히 처리할 수 있습니다.
주요 예외 종류
- ZeroDivisionError: 0으로 나누기 오류
- FileNotFoundError: 존재하지 않는 파일을 열려 할 때 발생
- TypeError: 잘못된 타입의 연산 수행
- ValueError: 부적절한 값을 함수에 전달했을 때 발생
- IndexError: 리스트 또는 튜플의 범위를 초과했을 때 발생
- KeyError: 딕셔너리에 존재하지 않는 키를 참조할 때 발생
- AttributeError: 존재하지 않는 속성을 접근하려 할 때 발생
- NameError: 정의되지 않은 변수를 참조했을 때 발생
- ImportError: 모듈 임포트 실패
- RuntimeError: 일반적인 실행 중 오류
3. 구문 오류와 예외의 주요 차이점
구분 구문 오류(SyntaxError) 예외(Exception)
발생 시점 | 코드 실행 전(컴파일 단계) | 코드 실행 중(runtime) |
원인 | 문법적 오류 | 실행 중 발생하는 오류(연산 오류, 파일 없음 등) |
예제 | print("Hello" (괄호 누락) | 10 / 0 (0으로 나누기) |
처리 가능 여부 | try-except로 처리 불가능 | try-except로 처리 가능 |
4. 예시
# SyntaxError 예제
# 문법적으로 잘못된 코드 예시 (괄호 닫기 누락)
# 이 코드는 실행 자체가 되지 않음
# print("Hello"
# 올바른 예제
print("Hello") # 정상 실행
# 예외(Exception) 예제
# 실행 중 발생하는 오류는 try-except로 처리 가능
try:
result = 10 / 0 # ZeroDivisionError 발생
except ZeroDivisionError as e:
print(f"예외 발생: {e}")
try:
numbers = [1, 2, 3]
print(numbers[5]) # IndexError 발생 (범위를 초과한 인덱스 접근)
except IndexError as e:
print(f"예외 발생: {e}")
try:
value = int("hello") # ValueError 발생 (문자열을 숫자로 변환 실패)
except ValueError as e:
print(f"예외 발생: {e}")
try:
x = int("hello") # ValueError 발생
except Exception as e: # 모든 예외를 처리하는 기본 예외 클래스
print(f"예외 발생: {e}")
예외 처리는 크게 두 가지 방식으로 접근할 수 있습니다.
- 구체적인 예외를 명시적으로 처리하는 방법
- 특정 예외를 따로 처리하여 원인을 명확하게 파악할 수 있음.
- 예외별로 다른 대응이 가능함.
- Exception을 사용해 한 번에 처리하는 방법
- 다양한 예외를 일괄적으로 잡아 코드가 간결해짐.
- 예상치 못한 예외도 처리할 수 있음.
이러한 구조는 if, elif, else 문법과 비슷하게 이해할 수 있습니다.
즉, 명시적으로 예외를 처리하고 (if, elif) 마지막에 Exception을 설정해 두면 (else) 예상치 못한 예외 상황을 대비할 수 있습니다.
5. 결론
파이썬에서 구문 오류(SyntaxError)는 코드 실행 전에 문법적으로 잘못되었을 때 발생하며, try-except로 처리할 수 없습니다. 반면, 예외(Exception)는 실행 중 발생하는 오류이며, try-except를 사용해 적절히 처리할 수 있습니다.
'혼공학습단 > 혼공파' 카테고리의 다른 글
[혼공파] Beautiful Soup & Flask 로 기상청 날씨 정보 훔치기 (0) | 2025.02.23 |
---|---|
[혼공파] Python의 매개변수와 기본 매개변수, 가변 매개변수 이해하기 (0) | 2025.02.09 |
[혼공파] Python 자료형: 리스트, 딕셔너리, 범위형 자료형 (0) | 2025.01.25 |
[혼공파] 띠 계산 프로그램: 세 가지 구현 방식 비교 (0) | 2025.01.19 |
[혼공파] print 함수 톺아보기 (0) | 2025.01.08 |