본문 바로가기
-----ETC2-----/Python

[Python] Week 14: 예외 처리

by cogito21_python 2024. 6. 1.
반응형

Day 1: 예외의 기본 개념

  • 강의 내용:
    • 예외의 정의와 필요성
      • 예외와 에러의 차이
      • 예외 처리가 필요한 이유
    • 기본 예외 처리 구조
      • try-except 문
      • 예외 발생 시 흐름 제어
  • 실습:
    • 기본 예외 처리 예제 작성
# 기본 예외 처리
try:
    result = 10 / 0
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")

 

Day 2: 여러 예외 처리

  • 강의 내용:
    • 여러 예외 처리
      • 여러 예외를 한꺼번에 처리
      • 개별 예외 처리
    • 다양한 예외 클래스
      • ValueError, TypeError 등
  • 실습:
    • 여러 예외를 처리하는 예제 작성
# 여러 예외 처리
try:
    value = int("abc")
    result = 10 / 0
except (ValueError, ZeroDivisionError) as e:
    print(f"예외 발생: {e}")

 

Day 3: else와 finally 절

  • 강의 내용:
    • else 절
      • 예외가 발생하지 않았을 때 실행
    • finally 절
      • 예외 발생 여부와 관계없이 항상 실행
  • 실습:
    • else와 finally 절을 포함한 예외 처리 예제 작성
# else와 finally 절
try:
    result = 10 / 2
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
else:
    print("연산 성공:", result)
finally:
    print("예외 처리가 완료되었습니다.")

 

Day 4: 사용자 정의 예외

  • 강의 내용:
    • 사용자 정의 예외의 필요성
      • 내장 예외 클래스 상속
      • 사용자 정의 예외 클래스 작성
    • 사용자 정의 예외 사용 예제
  • 실습:
    • 사용자 정의 예외 클래스를 작성하고 사용하는 예제
# 사용자 정의 예외 클래스
class MyCustomError(Exception):
    def __init__(self, message):
        self.message = message
        super().__init__(self.message)

# 사용자 정의 예외 사용 예제
try:
    raise MyCustomError("이것은 사용자 정의 예외입니다.")
except MyCustomError as e:
    print(f"사용자 정의 예외 발생: {e.message}")

 

Day 5: 예외 전파와 재발생

  • 강의 내용:
    • 예외 전파
      • 함수 내에서 발생한 예외가 호출자에게 전파되는 과정
    • 예외 재발생
      • 예외를 처리한 후 다시 발생시키기
  • 실습:
    • 예외 전파와 재발생 예제 작성
# 예외 전파
def divide(x, y):
    return x / y

def calculate():
    try:
        result = divide(10, 0)
    except ZeroDivisionError as e:
        print(f"예외 처리: {e}")
        raise  # 예외 재발생

try:
    calculate()
except ZeroDivisionError as e:
    print(f"최종 예외 처리: {e}")

 

Day 6: 예외 처리의 모범 사례

  • 강의 내용:
    • 예외 처리 모범 사례
      • 예외 발생 가능성이 있는 코드 최소화
      • 구체적인 예외 클래스 사용
      • 로그를 사용한 예외 기록
  • 실습:
    • 예외 처리 모범 사례를 적용한 예제 작성
import logging

# 로그 설정
logging.basicConfig(level=logging.ERROR)

def divide(x, y):
    try:
        return x / y
    except ZeroDivisionError as e:
        logging.error("0으로 나눌 수 없습니다.", exc_info=True)
        return None

result = divide(10, 0)
print(result)  # None

 

Day 7: 예외 처리 종합 연습 및 프로젝트

  • 강의 내용:
    • 예외 처리 종합 연습 문제 풀이
      • 다양한 예외 처리 문제
      • Q&A 세션
    • 미니 프로젝트
      • 주제 선정 및 프로그램 설계
      • 예외 처리를 활용한 프로그램 구현 및 테스트
  • 실습:
    • 종합 연습 문제 풀기
    • 미니 프로젝트 작성 및 발표
# 연습 문제 1: 파일 읽기 시 파일이 없는 경우 예외 처리
def read_file(file_path):
    try:
        with open(file_path, "r") as file:
            return file.read()
    except FileNotFoundError as e:
        print(f"파일을 찾을 수 없습니다: {e}")
        return None

content = read_file("nonexistent_file.txt")
print(content)  # None

# 연습 문제 2: 사용자 입력을 받아 숫자로 변환하는 함수 작성 (예외 처리 포함)
def get_number():
    while True:
        try:
            return int(input("숫자를 입력하세요: "))
        except ValueError:
            print("유효한 숫자가 아닙니다. 다시 시도하세요.")

number = get_number()
print(f"입력한 숫자: {number}")

# 미니 프로젝트 예제: 간단한 계산기 프로그램 (예외 처리 포함)
def calculator():
    try:
        num1 = float(input("첫 번째 숫자를 입력하세요: "))
        operator = input("연산자를 입력하세요 (+, -, *, /): ")
        num2 = float(input("두 번째 숫자를 입력하세요: "))

        if operator == "+":
            result = num1 + num2
        elif operator == "-":
            result = num1 - num2
        elif operator == "*":
            result = num1 * num2
        elif operator == "/":
            result = num1 / num2
        else:
            print("유효하지 않은 연산자입니다.")
            return

        print(f"결과: {result}")

    except ValueError as e:
        print(f"유효하지 않은 입력입니다: {e}")
    except ZeroDivisionError as e:
        print(f"0으로 나눌 수 없습니다: {e}")

calculator()

 

이 강의는 파이썬의 예외 처리를 익히는 것을 목표로 하며, 각 강의는 이론과 실습을 포함합니다. 다음 주차에 대한 상세 강의를 원하시면 말씀해 주세요!

반응형

'-----ETC2----- > Python' 카테고리의 다른 글

[Python] Week 16: 패키지  (0) 2024.06.01
[Python] Week 15: 모듈  (0) 2024.06.01
[Python] Week 13: 파일 입출력  (0) 2024.06.01
[Python] Week 12: 문자열 - 정규표현식  (0) 2024.06.01
[Python] Week 11: 문자열 조작  (0) 2024.06.01