[Zero-base 데이터분석] Python중급_예외(Exception)

박지은·2023년 10월 2일
post-thumbnail

1. 예외

◾ 예외 : 문법적인 문제는 없으나 실행 중 바생하는 문제(ex. 0으로 나누셈 진행시, ZeroDivisionError)
◾ 예외 관련 클래스는 Exception 클래스를 상속

2. 예외처리

◾ 예외 처리 : 예상하지 못한 예외가 프로그램 전체에 영향이 없도록 처리

1) try ~ except 구문

◾try ~ except 구문을 이용하여 예외 발생 처리
◾ 정확하게 예의가 발생할 것으로 예상되는 부분에 사용
n1 = 10; n2=0

try:
    print(n1/n2)    # 예외 발생 예상 부분

except:
    print('예상치 못한 문제가 발생했습니다.')   # 예외 처리
    print('다음 프로그램이 정상 실행 됩니다.')

print(n1*n2)
print(n1-n2)
print(n1+n2)
----------------------------------------------------------------
예상치 못한 문제가 발생했습니다.
다음 프로그램이 정상 실행 됩니다.
0
10
10

2) try ~ except ~ else 구문

◾~ else : 예외가 발생하지 않은 경우 실행하는 구문
◾ else는 try~ except 구문을 사용했을때 이용 가능
nums = []
n = 1

while n < 4:

    try:
        num = int(input('숫자 입력 : '))

    except:
        print('예외 발생!!')
        continue

    if num % 2 == 0:
        nums.append(num)
        n += 1

    else:
        print('홀수 입니다.', end='')
        print('다시 입력하세요')
        continue

print(f'nums = {nums}')
-------------------------------------------
숫자 입력 : 가나다
예외 발생!!
숫자 입력 : 2
숫자 입력 : 1
홀수 입니다.다시 입력하세요
숫자 입력 : 4
숫자 입력 : 6
nums = [2, 4, 6]

3) finally

◾예외 발생과 상관없이 항상 실행
try:
    inputData = input('숫자(정수) : ')
    numInt = int(inputData)

except:
    print('에러발생')

else:
    if numInt % 2 == 0:
        print('짝수')
    else:
        print('홀수')

finally:
    print(f'{inputData}')
-------------------------------------------
숫자(정수) : 가다나
에러발생
가다나

3. Exception 클래스

◾ 프로그래밍에서 오류 또는 예외 상황을 나타내는 클래스
try:
    result = 10 / 0
except Exception as e:
    print(f'Exception : {e}')
----------------------------------------------------------------
Exception : division by zero

1) raise 키워드

◾raise 키워드를 이용하여 예외 발생 가능
def diviCalculator(n1, n2):
    if n2 != 0:
        print(f'{n1} / {n2} = {n1/n2}')
    else:
        raise Exception('0으로 나눌 수 없습니다.')

num1 = int(input('input number1 : '))
num2 = int(input('input number2 : '))

try:
    diviCalculator(num1, num2)
except Exception as e:
    print(f'Exception = {e}')
----------------------------------------------------------------
input number1 : 10
input number2 : 0
Exception = 0으로 나눌 수 없습니다.

2) 사용자 예외 클래스

◾Exception 클래스를 상속해서 사용자 예외 클래스 생성 가능
◾ 특정 상황에 대한 예외를 더 잘 표현하고 관리 가능
class NotUseZeroException(Exception):    # Exception 상속
    def __init__(self,n):
        super().__init__(f'{n}은(는) 사용할 수 없습니다.')

def divCalculator(n1, n2):
    if n2 == 0:
        raise NotUseZeroException(n2)
    else:
        print(f'n1 / n2 = {n1/n2}')

inputNum1 = int(input('input number1 : '))
inputNum2 = int(input('input number2 : '))

try:
    divCalculator(inputNum1, inputNum2)
except NotUseZeroException as e:
    print(f'exception error : {e}')
----------------------------------------------------------------
input number1 : 10
input number2 : 0
exception error : 0() 사용할 수 없습니다.
profile
예비 분석가

0개의 댓글