[7일차] 파이썬 중급7

하은·2023년 10월 23일
0

029. 예외처리

예외를 별도 처리함으로써 프로그램 실행에 문제가 없도록 함

- 예외처리

- 예상하지 못한 예외가 프로그램 전체 실행에 영향이 없도록 처리함

예)
프로그램 실행 1
프로그램 실행 2
프로그램 실행 3 -> 예외발생 -> 중단
프로그램 실행 4
프로그램 실행 5
-> 발생한 예외에 대해서 별도 처리하고, 다음 프로그램이 계속 실행되도록 한다.

- try ~ except

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

n1 = 10; n2 = 0

try:
    print(n1 / n2)
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
        
    nums.append(num) #새로운 정보를 리스트에 추가 = list.append(object)
    n += 1

print(f'nums: {nums}')

-->
input number: 5
input number: 1
input number: ㅂ
예외 발생
input number: 3
input number: 4
input number: 5
nums: [5, 1, 3, 4, 5]

030. try ~ except ~ else

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

- ~ else

- 예외가 발생하지 않은 경우에 실행하는 구문이다

  • 꼭 필요한 건 아니고 생략가능.
  • try ~ except를 썼을 때만 사용가능하다.
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(int(num))
            else:
                print('odd number')
                oddList.append(int(num))

        n += 1

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

031. finally

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

- finally

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

네트워크를 통해 외부자원을 쓰고 있을 때, 예외 유무에 상관없이 마지막으로 꼭 자원을 해제해야할 때

try:
    inputData = input('input number: ')
    numInt = int(inputData)
except:
    print('exception raise')
    print('not number')
else:
    if numInt % 2 == 0:
        print('even number')
    else:
        print('odd number')
finally:
    print(f'inputData : {inputData}')

-->
input number: 0
even number
inputData : 0

실습) 사용자로부터 숫자 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
    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}')

032. Exception 클래스

Exception는 예외를 담당하는 클래스이다.

- Exception

- 예외 담당 클래스 Exception

  • 왜 에러가 발생했는지 나타내기 위함
    = Exception as e:
num1 = int(input('input number1: '))
num2 = int(input('input number2: '))

try:
    print(f'num1 / num2 = {num1 / num2}')
    
except Exception as e:
#   print('0으로 나눌 수 없습니다.')
    print(f'exception: {e}')

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

input number1: 10
input number2: 0
exception: division by zero
num1 + num2 = 10
num1 - num2 = 10
num1 * num2 = 0

- raise

- 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}')
    # raise로 설정한 문구 그대로 나옴
-->
input number1: 10
input number2: 0
Exception: 0으로 나눌 수 없습니다.

? 실습) 사용자가 문자 메시지를 보낼 때 10글자 이하면 SMS로 발송하고, 10글자를 초과하면 MMS로 발송하는 프로그램을 예외처리를 이용해서 만들어보자

def sendSMS(msg):

    if len(msg) > 10:
        raise Exception('길이 초과! MMS 전환 후 발송', 1)

    else:
        print('SMS 발송')

def sendMMS(msg):

    if len(msg) <= 10:
        raise Exception('길이 미달! SMS 전환 후 발송', 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)

0개의 댓글