[제로베이스] [파이썬] 예외처리

한결·2023년 12월 13일
0
post-thumbnail

1. 예외란?

예외
예외란, 문법적인 문제는 없으나 실행 중 발생하는 예상하지 못한 문제.

print(10/0)

ZeroDivisionError: division by zero


2. 예외 처리

try ~ except
예외를 처리할 때 쓰는 구문

n1 = 10; n2 = 0

try :
    print(n1/n2)
except :
    print('오류 발생! 다른데는 문제 없음') # 예외 처리

print(n1+n2)
print(n1-n2)
print(n1*n2)
오류 발생! 다른데는 문제 없음
10
10
0

~else
예외가 발생하지 않은 경우 실행하는 구문

nums = []

n=1

while n<6 :
    try :
        a=int(input('숫자 적어주셈: '))
        nums.append(a)
        n += 1

    except :
        print('숫자 적으라고')
        continue

    else : # 예외가 발생하지 않으면 실행한다.
        if a%2 ==0 :
            print('짝수 입니다.')

        else :
            print('홀수 입니다.')

print(nums)
숫자 적어주셈: 2
짝수 입니다.
숫자 적어주셈: 7
홀수 입니다.
숫자 적어주셈: 싫어
숫자 적으라고
숫자 적어주셈: 3
홀수 입니다.
숫자 적어주셈: 132
짝수 입니다.
숫자 적어주셈: 4
짝수 입니다.
[2, 7, 3, 132, 4]

finally
예외 발생과 상관없이 항상 실행한다.

try :
    inputData = input('정수를 입력해줘요 : ')
    numInt = int(inputData)

except : # 오류일 때 실행
    print('정수 뜻 모름?')

else : # 오류가 아닐 때 실행
    if numInt % 2 == 0 :
        print('짝수입니다.')

    else :
        print('홀수입니다.')

finally : # 오류 여부와 상관 없이 무조건 실행
    print(f'input data : {inputData}')

시행 1

정수를 입력해줘요 : 싫어
정수 뜻 모름?
input data : 싫어

시행 2

정수를 입력해줘요 : 2
짝수입니다.
input data : 2

시행 3

정수를 입력해줘요 : 3
홀수입니다.
input data : 3

3. Exception 클래스

Exception
예외 담당 클래스

a1 = 10; a2 = 0

try :
    print(a1/a2)

except Exception as e :
    print(f'에러 발생 : {e}')
에러 발생 : division by zero

raise
raise 키워드를 이용하면 에러 상황을 설정 할 수 있다.

def divCal(n1, n2):

    if n2 != 0:
        print(f'{n1}/{n2}')

    else :
        raise Exception('0으로 나눌 수 없습니다.') # 예외 발생

num1 = int(input('분자 입력 : '))
num2 = int(input('분모 입력 : '))

try :
    divCal(num1, num2)

except Exception as e :
    print(f'Exception: {e}')
분자 입력 : 2
분모 입력 : 0
Exception: 0으로 나눌 수 없습니다.

4. 사용자 Exception 클래스

class notusezero(Exception) : # 사용자 Exception 클래스

    def __init__(self,n):
        super().__init__(f'{n}은 사용할 수 없습니다.')

def divCal(n1,n2):

    if n2 ==0 :
        raise notusezero(n2)
    else :
        print(f'{n1/n2}')

num1 = int(input('분자: '))
num2 = int(input('분모: '))

try:
    divCal(num1,num2)

except notusezero as e:
    print(e)
분자: 3
분모: 0
0은 사용할 수 없습니다.
profile
낭만젊음사랑

0개의 댓글