Day13. 파이썬 중급 (7)

Junghwan Park·2023년 4월 20일
0

스터디노트

목록 보기
14/54

예외처리

-예외처리
발생된 예외를 별도 처리함으로써 프로그램 전체의 실행에 문제가 없도록 함.

프로그램 실행1
프로그램 실행2
프로그램 실행3 → 예외 발생!! → 발생한 예외에 대해서 별도 처리함.
프로그램 실행4
프로그램 실행5

try ~ except
예외 발생 예상 구문을 try ~ except로 감싼다.

n1 = 10; n2 = 0

try:
    print(n1 / n2)      # n2가 0인 경우 문제 발생
except:
    print('예상치 못한 문제가 발생했습니다.')
    print('다음 프로그램이 정상 실행됩니다.')
print(n1 * n2)
print(n1 - n2)
print(n1 + n2)

-실습
사용자로부터 숫자 5개를 입력받을 때 숫자가 아닌 자료형이 입력되면 예외 처리하는 프로그램을 만들어보자.

nums = []

n = 1
while n < 6:

    try:
        num = int(input('input number : '))
    except:
        print('예외 발생!!')
        continue    # 숫자가 5개 채워질 때까지 반복되야 하므로!

    nums.append(num)
    n += 1

print(f'nums : {nums}')

try ~ except ~ else

  • try ~ except ~ else
    예외가 발생하지 않은 경우에 실행하는 구문! → else에다가!
    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('홀수 입니다.', end = '')
            print('다시 입력 하세요.')
            continue

print(f'nums : {nums}')
  • 실습
    사용자로부터 숫자 5개를 입력받아 짝수, 홀수, 실수로 구분해서 각각을 리스트에 저장하는 프로그램을 만들어보자.
  • 군집에서 구분할 때 자주 사용되는 코드이다!
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(num)
            else:
                print('odd number!')
                oddList.append(num)

    n += 1

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

finally

  • finally
    예외 발생과 상관없이 항상 실행한다.
    네트워크를 통해 외부 자원으로 코딩을 할 때 외부자원 연결을 끊어야 할 때 주로 사용
try:
    inputData = input('input number : ')
    numInt = int(inputData)     # 문자가 들어오면 정수화 불가하므로 예외 처리

except:
    print('exception raise!!')
    print('not number!!')

else:
    if numInt % 2 == 0:
        print('inputData is even number!!')
    else:
        print('inputData is odd number!!')

finally:    # 예외 발생, 예외 미발생 모두 입력 받은 데이터를 출력 해준다!
    print(f'inputData : {inputData}')
  • 실습
    사용자로부터 숫자 5개를 입력받아 짝수, 홀수, 실수와 입력한 모든 데이터를 각각 출력하는 프로그램을 만들어보자.
evenList = []; oddList = []; floatList = []; dataList = []

n = 1
while n < 6:

    try:
        data = input('input number : ')
        floatNum = float(data)
    except:
        print('exception raise!!')
        print('not number!!')
        continue    # n이 카운트 되면 안됨
    else:
        if floatNum - int(floatNum) != 0:
            print('float number!!')
            floatList.append(floatNum)
        else:
            if floatNum % 2 == 0:
                print('even number!!')
                evenList.append(int(floatNum))
            else:
                print('odd number!!')
                oddList.append(int(floatNum))

        n += 1

    finally:
        dataList.append(data)

print(f'evenList : {evenList}')
print(f'oddList : {oddList}')
print(f'floatList : {floatList}')
print(f'dataList : {dataList}')

Exception 클래스

  • Exception 클래스
    Exception은 예외를 담당하는 클래스이다.
    예외 담당 클래스 Exception
  • raise 키워드를 이용하면 예외를 발생시킬 수 있다.
num1 = int(input('input number1 : '))
num2 = int(input('input number2 : '))

try:
    print(f'num1 / num2  = {num1 / num2}')  # 0으로 나눌 경우 예외
# except:
#     print('0으로 나눌 수 없습니다.')     # 결과로 볼 때는 어떤 오류인지는 알 수 가 없다
#       ▼
except Exception as e:      # Exception 클래스로 어떤 오류인지도 출력
    print('0으로 나눌 수 없습니다.')
    print(f'excetion : {e}')


print(f'num1 * num2 = {num1 * num2}')
print(f'num1 - num2 = {num1 - num2}')
print(f'num1 + num2 = {num1 + num2}')


raise 키워드를 이용하면 예외를 발생시킬 수 있다.

def divCalculator(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:
    divCalculator(num1, num2)   # 이 부분에서 에러가 발생하므로
except Exception as e:
    print(f'Exception : {e}')
  • 실습
    사용자가 문자 메시지를 보낼때 10글자 이하면 SMS로 발송하고,
    10글자를 초과하면 MMS로 발송하는 프로그램을 예외 처리를 이용해서 만들어보자.
def sendSMS(msg):
    if len(msg) > 10:
        raise Exception('길이 초과!! MMS전환 후 발송!!', 1)      # 뒤에 1 확인!

    else:
        print('SMS 발송!!')

def sendMMS(msg):
    if len(msg) <= 10:
        raise Exception('길이 미달!! SMS전환 후 발송!!', 2)      # 뒤에 2 확인!
    else:
        print('MMS 발송!!')

msg = input('input message : ')

try:
    sendSMS(msg)

except Exception as e:
    print(f'e: {e.args[0]}')
    print(f'e: {e.args[1]}')

    if e.args[1] == 1:
        sendMMS(msg)
    elif e.args[1] == 2:
        sendSMS(msg)

# args[0] 부분이 출력 안됨 다시 확인해 볼 것 !

args[0] 부분이 출력 안됨 다시 확인해 볼 것 !


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

profile
안녕하세요 반갑습니다^^

0개의 댓글