1. 에러(Error)란?
프로그램 실행 도중 발생하는 문제를 에러라고 한다.
- 문법 에러(Syntax Error) : 코드 문법 자체가 잘못되었을 때 발생
- 런타임 에러(Runtime Error) : 실행 도중 발생하는 오류
# Syntax Error 예시
print("Hello" # 괄호 닫지 않음
# Runtime Error 예시
print(10 / 0) # ZeroDivisionError
2. 예외(Exception)란?
런타임 에러 중 처리 가능한 오류를 예외라고 한다. 예외가 발생하면 프로그램이 즉시 중단되므로, 예외 처리를 통해 안정적으로 동작하도록 만든다.
3. try ~ except 기본 구조
try:
x = int(input("숫자를 입력하세요: "))
print(10 / x)
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
except ValueError:
print("숫자가 아닙니다.")
try: 예외가 발생할 수 있는 코드except: 특정 예외가 발생했을 때 실행할 코드
4. 예외 종류별 처리
try:
data = [1, 2, 3]
print(data[5]) # IndexError 발생
except IndexError:
print("인덱스 범위를 벗어났습니다.")
대표적인 예외 유형
ZeroDivisionError: 0으로 나눌 때ValueError: 잘못된 값 입력IndexError: 인덱스 범위 초과KeyError: 존재하지 않는 딕셔너리 키 접근FileNotFoundError: 파일이 없을 때
5. 다중 except와 예외 묶음
try:
num = int("python")
except (ValueError, TypeError):
print("잘못된 형 변환입니다.")
- 여러 예외를 한 번에 묶어서 처리 가능
6. else와 finally
6.1 else
예외가 발생하지 않았을 때 실행된다.
try:
print("정상 실행")
except:
print("예외 발생")
else:
print("예외 없이 끝남")
6.2 finally
예외 발생 여부와 관계없이 반드시 실행된다.
try:
f = open("example.txt", "r", encoding="utf-8")
data = f.read()
except FileNotFoundError:
print("파일이 존재하지 않습니다.")
finally:
print("파일 처리 종료")
7. 예외 객체와 as
try:
1 / 0
except ZeroDivisionError as e:
print("예외 메시지:", e)
as e를 사용하면 예외 메시지를 확인 가능
8. 사용자 정의 예외
개발자가 직접 예외 클래스를 정의할 수도 있다.
class NegativeNumberError(Exception):
pass
def check_positive(num):
if num < 0:
raise NegativeNumberError("음수는 허용되지 않습니다.")
try:
check_positive(-5)
except NegativeNumberError as e:
print("사용자 정의 예외 발생:", e)