본문 바로가기
파이썬/파이썬 기초 문법

파이썬의 예외 처리

by 쵠몽 2024. 10. 20.

1. 예외 (Exception)

프로그램 실행  발생할  있는 문제 또는 오류 상황을 의미한다. 예외가 발생하면 프로그램이 중단되기 때문에 이를 적절하게 처리하여 중단을 방지하거나 오류에 대한 정보를 사용자에게 제공해야 한다.

 

print(10 / 3)
print(5 / 0) # ZeroDivisionError: division by zero
print(4/2)

 

 

2. 예외 처리 기본 구조

try:
    # 예외가 발생할 가능성이 있는 코드

except ExceptionType1:  # 'ExceptionType1'에는 실제 예외 유형이 들어갑니다.
    # ExceptionType1 예외가 발생했을 때 실행될 코드

except ExceptionType2:  # 'ExceptionType2'에는 다른 예외 유형이 들어갑니다.
    # ExceptionType2 예외가 발생했을 때 실행될 코드

# 추가적인 except 블록을 계속 추가할 수 있습니다.

else:
    # try 블록에서 예외가 발생하지 않았을 때 실행될 코드

finally:
    # 예외 발생 여부와 관계없이 항상 실행될 코드

 

 

2-1. 특정 예외 처리하기

try:
    print(10 / 3)
    print(5 / 0)  # 에러 발생
    print(4/2)	  # 실행되지 않음
except ZeroDivisionError:
    print('예외가 발생했어요')
print('프로그램을 종료합니다')
try:
    data = [10, 20, 30, 40, 50]
    print(data[2])
    print(data[5]) # 에러 발생
    print(data[0]) # 실행되지 않음
except IndexError:
    print('인덱스 지정이 올바르지 않습니다')



2-2. 모든 예외 처리하기

try:
    print(10 / 3)
    print(5 / 0)
    print(4/2)  
except:
    print('예외가 발생했어요')
print('프로그램을 종료합니다')

 

 

2-3. 예외 에러 메세지 받기

try:
    data = [10, 20, 30, 40, 50]
    # print(data[0])
    # print(int('안녕'))
    print(5/0)
except IndexError:
    print('인덱스 지정이 올바르지 않습니다')
except ValueError:
    print('값이 잘못 입력되었습니다')
except ZeroDivisionError:
    print('0으로 나눌 수 없습니다')
except: # 작성 시 맨 마지막으로 작성해야 함 # Exception이 생략된 표현
    print('예외가 발생했어요')
print('프로그램을 종료합니다')

 

 

2-4. 예외가 발생하지 않을 경우 처리하기, 예외 발생 여부 관계없이 처리하기

try:
    data = [10, 20, 30, 40, 50]
    # print(data[5])
    # print(int('안녕'))
    print(5/0)
except IndexError as e:
    print(e)
except ValueError as e:
    print(e)
except ZeroDivisionError as e:
    print(e)
except Exception as e:  
    print('예외가 발생했어요')
print('프로그램을 종료합니다')
try:
    data = [10, 20, 30, 40, 50]
    # print(data[5])
    # print(int('안녕'))
    # print(5/0)
except IndexError as e:
    print(e)
except ValueError as e:
    print(e)
except ZeroDivisionError as e:
    print(e)
else:
    print('에러가 발생하지 않은 정상적인 프로그램')
finally:
    print('에러에 관계없이 무조건 실행되는 문장')
print('프로그램을 종료합니다')

 

 

3. Exception 클래스

# raise: 예외 상황을 발생시킴
try:
    raise Exception('예외가 발생했어요!!')
except Exception as e:
    print(e)
def func1():
    n = int(input('짝수를 입력하세요: '))
    if n % 2 == 1:
        raise Exception('홀수를 입력했어요!!')
    print(n)
    
func1()
try:
    func1()
except Exception as e:
    print('예외가 발생: ', e)
def func1():
    try: func2()  
    except TypeError:
        print('타입이 올바르지 않습니다')

def func2():
    func3()

def func3():
    print('%d' % '문자열') 
    
func1()
def func1():
    func2()

def func2():
    func3()

def func3():
    try: # func1() func2() func3() 중 어디에 적든 상관 없음
        print('%d' % '문자열')     
    except TypeError:
        print('타입이 올바르지 않습니다')
        
func1()
class AgeLimitError(Exception):
    def __init__(self, age, message='MZ세대 나이의 범위가 아님'):
        self.age = age
        self.message = message
        super().__init__(self.message)


def check_age(age):
    
    if age < 14:
        raise AgeLimitError(age, 'MZ 나이 범위보다 작음')
    
  
    elif age > 43:
        raise AgeLimitError(age, 'MZ 나이 범위보다 큼')

  
    else:
        return f'{age} 나이: MZ 나이 범위 안에 포함'

ages = [17, 60, 46, 20, 80, 55, 26, 12, 5]

for age in ages:
    try:
        print(check_age(age))
    except AgeLimitError as e:
        print(f'{e.age} 나이 에러: {e}')

'파이썬 > 파이썬 기초 문법' 카테고리의 다른 글

파이썬 파일 입출력  (0) 2024.10.20
파이썬 모듈  (2) 2024.10.20
파이썬 스페셜 메서드  (4) 2024.10.19
파이썬 상속  (2) 2024.10.19
클로저와 데코레이터  (1) 2024.10.14