제로베이스 데이터 파트타임 스쿨 학습 일지 [25.04.03]

[강의 요약]

[Ch 03. 파이썬 중급] 강의 수강

28_예외란?부터 30_try ~ except ~ else까지 강의 수강하였음

🐢 100일 챌린지 🔥 : [▰▰▰▰▰▰▰▰▰                                            ] 18/100일 (18%)

바빠서 울면서 적는 중

 

 

 

[예외란?]

  • 예외란?
    • 문법적인 오류는 없지만, 실행 중에 발생하는 예상치 못한 문제를 말함
    • 예외가 발생하면 프로그램은 즉시 멈추고 에러 메시지 출력
    • 예외 처리를 하지 않으면 프로그램이 중단됨

 

 

▶ 예외 발생 예시

def div(n1, n2):
    print(n1 / n2)

div(10, 2)   # 정상 출력 → 5.0
div(10, 0)   # 예외 발생! → ZeroDivisionError
ZeroDivisionError: division by zero

0으로 나누는 상황은 문법상 문제는 없으나

실행 도중 오류가 발생하는 전형적인 예

 

 

▶ 예외 종류

 

 

▶ 예제 코드 : 예외 예시

print(10 / 0)                  # ZeroDivisionError

int('Hello')                  # ValueError

tempList = [1, 2, 3]
print(tempList[5])            # IndexError

# 잘못된 들여쓰기 (IndentationError)
# if True:
#     print('Hello')
#         print('World')

open('no_such_file.txt', 'r') # FileNotFoundError

 

 

▶ 예외 처리 방법

예외가 발생해도 프로그램이 멈추지 않도록 try ~ except 구문을 사용

try:
    print(10 / 0)
except:
    print('예외 발생! 확인해주세요.')
    
# 출력 결과
# 예외 발생! 확인해주세요.

 

 

▶ 요약

  • 예외란?
    • 실행 중 발생하는 오류
  • 왜 중요할까?
    • 프로그램 중단을 방지하기 위해 예외 처리가 필요해서
  • 어떻게 처리할까?
    • try ~ except 구문으로 안전하게 처리
  • 예시는 무엇이 있을까?
    • ZeroDivisionError, ValueError, IndexError 등

 

 

 

 

[예외 처리]

▶ 예외 종류

  • ZeroDivisionError : 0으로 나눴을 때
  • ValueError : 자료형이 안 맞을 때 (int('hello'))
  • IndexError : 리스트 인덱스 범위 초과
  • IndentationError : 들여 쓰기 문제
  • FileNotFoundError : 파일 경로 오류

 

 

 

 

▶ 예외 처리 문법

n1 = 10
n2 = 0

try:
    print(n1 / n2)
except:
    print('예상치 못한 예외가 발생했습니다.')
    print('다른 프로그램 실행에는 문제 없습니다.')

print(n1 * n2)
print(n1 - n2)
print(n1 + n2)

try ~ except 구문으로 예외 발생을 막을 수 있음

예외가 발생해도 프로그램 전체 실행을 멈추지 않고 정상적으로 흐름을 이어감

 

 

▶ 실습 코드 : 숫자 5개 받기

nums = []
n = 1

while n < 6:
    try:
        num = int(input('input number: '))
    except:
        print('예외 발생!')
        continue

    nums.append(num)
    n += 1

print(f'nums: {nums}')

사용자에게 숫자 5개를 입력받음

숫자가 아닌 값을 입력하면 ValueError가 발생하므로 이를 예외처리

 

 

▶ 요약

  • 예외는 언제 발생?
    • 실행 중에만 발생
  • 비정상 종료를 막는 안전 장치는?
    • try ~ except 구문
  • 예외 처리가 필수인 이유는?
    • 입력/파일 처리 등 사용자나 외부 요인이 관여하는 부분에 사용해야 하므로
  • 예외가 발생하더라도 남은 코드가 정상 실행되도록 할 수 있음!

 

 

 

 

 

[try ~ except ~ else]

  • try ~ except ~ else란?
    • try
      • 실행할 코드를 작성
    • except
      • 예외(에러)가 발생했을 때 실행할 코드
    • else
      • 예외가 발생하지 않았을 때만 실행할 코드

 

 

▶ 기본 구조

try:
    # 실행할 코드
except:
    # 예외 발생 시 처리할 코드
else:
    # 예외 없이 실행되었을 때만 작동

 

 

▶ 예제 코드

nums = []
n = 1

while n < 6:
    try:
        num = int(input('input number: '))
    except:
        print('예외 발생')
        continue
    else:
        if num % 2 == 0:
            nums.append(num)
            n += 1
        else:
            print('입력한 숫자는 홀수입니다. 다시 입력하세요.')
            continue

print(f'nums: {nums}')

숫자가 아니면 except로 빠짐

짝수면 리스트에 저장하고

홀수면 안내 메시지 출력 후 재입력 요청함

 

 

▶ 실습 코드 : 짝수 / 홀수 / 실수 구분하기

eveList = []
oddList = []
floatList = []

n = 1
while n < 6:
    try:
        num = float(input('input number: '))
    except:
        print('exception raise!!')
        print('input number again!!')
        continue
    else:
        if num - int(num) != 0:
            print('float number!')
            floatList.append(num)
        else:
            if num % 2 == 0:
                print('even number!')
                eveList.append(int(num))
            else:
                print('odd number')
                oddList.append(int(num))
        n += 1

print(f'eveList: {eveList}')
print(f'oddList: {oddList}')
print(f'floatList: {floatList}')

입력값에 따라 3가지 리스트로 분류됨

everList : 짝수

oddList : 홀수

floatList : 실수

 

 

▶ 요약

  • try는 문제 발생할 수 있는 코드를 감싼다.
  • except는 예외 발생 시 처리한다.
  • else는 예외가 발생하지 않았을 때만 실행된다.
  • 흐름 제어를 통해 유저 입력 검증 및 분기 처리를 깔끔하게 할 수 있다.

 

 

 

 

[나의 생각 정리]

  • 예외 처리를 하면 프로그램이 중단되지 않고 계속 실행될 수 있다.
  • try ~ except는 예외 발생 시 대처할 수 있도록 도와준다.
  • else는 예외가 발생하지 않을 때만 실행되어 흐름을 명확히 만든다.
  • 예외 처리는 사용자 입력을 다룰 때 특히 유용하다.

 

 

[적용점]

  • 예외 발생 가능성이 있는 코드가 있다면?
    • try ~ except로 감싸자
  • 예외가 발생하지 않았을 때만 특정 작업을 하려면?
    • else를 활용하자
  • 사용자 입력을 안전하게 받고 싶을 때?
    • try ~ except로 검증하자
  • 숫자 외에 다른 형식 입력을 걸러내고 싶다면?
    • except에서 안내 메시지 출력 후 continue로 반복
  • 입력값을 조건에 따라 분류하고 싶다면?
    • else 블록 내 조건문으로 분류 처리

 

 

 

 

 

“이 글은 제로베이스 데이터 스쿨 주 3일반 강의 자료 일부를 발췌하여 작성되었습니다.”