파이썬, 예외처리

sky.dev·2025년 4월 16일

Data&AI-Uni.

목록 보기
17/77
post-thumbnail

오류종류

구문 오류(Syntax Error)

코드 실행 전에 발생하는 오류입니다.

예를 들어, 괄호를 닫지 않거나 잘못된 문법을 쓰면 발생합니다.

구문 오류는 반드시 코드를 수정해야 실행이 가능합니다.
print("Hello world"  # 괄호가 닫히지 않아 SyntaxError 발생

예외(Exception) 또는 런타임 오류(Runtime Error)

코드 실행 중에 발생합니다.

문법은 맞지만, 실행 도중 문제가 생겼을 때 발생합니다.

예외 처리를 통해 프로그램이 비정상적으로 종료되는 것을 막을 수 있습니다.
n = 10
res = n / 0  # ZeroDivisionError 발생

예외처리

예외 처리가 필요한 이유

실행 중에 발생할 수 있는 다양한 예외 상황(예: 파일이 없거나, 0으로 나누기 등)에 대비해 프로그램이 갑자기 종료되지 않도록 안전장치를 마련하는 것이 예외 처리의 목적입니다.

예외 처리 방법

  1. 조건문으로 미리 체크
  2. try-except 구문 사용

🌳조건문 : 입력값이 숫자인지 판별

user_input = input("숫자를 입력하세요: ")
if user_input.isdigit():
    num = int(user_input)
else:
    print("숫자가 아닙니다.")

🌳try-except 구문

예외가 발생할 수 있는 코드를 try 블록에 넣고, 예외가 발생하면 except 블록에서 처리합니다.

try:
    print(1 / 0)
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")

여러 예외를 한번에 처리할 수 있다

try:
    # 예외가 발생할 수 있는 코드
    pass
except (TypeError, ValueError):
    print("타입 또는 값 오류 발생")

예외 객체 활용

예외 정보를 변수로 받아 활용

try:
    open("없는파일.txt")
except FileNotFoundError as e:
    print(e)

🌳try - except - else 구문

예외가 발생하지 않았을 때 실행할 코드를 else에 작성

try:
    num = int(input("숫자 입력: "))
except ValueError:
    print("숫자가 아닙니다.")
else:
    print("입력한 숫자:", num)

🌳try - except - finally 구문

예외 발생 여부와 관계없이 항상 실행되는 코드는 finally에 작성.
주로 파일 닫기, 리소스 해제 등에 사용

try:
    f = open("data.txt", "r")
    data = f.read()
except FileNotFoundError:
    print("파일이 없습니다.")
finally:
    print("항상 실행되는 코드")

조합규칙

try는 반드시 except 또는 finally와 함께 사용해야 합니다.

else는 except 뒤에만 올 수 있습니다.

가능한 조합:

try + except

try + except + else

try + except + finally

try + except + else + finally

try + finally

자주 만나는 예외 종류

SyntaxError - 잘못된 문법 (예: 괄호 미작성)
NameError - 정의되지 않은 변수 사용
ZeroDivisionError - 0으로 나누기 시도
IndexError - 리스트 등에서 인덱스 범위 벗어남
ValueError - 올바르지 않은 값 사용 (예: int('abc'))
KeyError - 딕셔너리에 없는 키 사용
AttributeError - 없는 속성/메서드 사용
FileNotFoundError - 존재하지 않는 파일 열기
TypeError - 타입 불일치 (예: 리스트 + 문자열)

예외 처리 전략: EAFP vs LBYL

EAFP (Easier to Ask Forgiveness than Permission):

    일단 실행하고, 예외가 발생하면 처리합니다.

    파이썬에서 권장하는 스타일입니다.

    예시: try-except 사용

LBYL (Look Before You Leap):

    실행 전 조건문으로 모든 상황을 체크합니다.

    예시: if 문으로 타입, 값 등 미리 검사

0개의 댓글