[Python] Python의 예외 처리 (try~except)

Python의 예외처리 (try~except) 하기


try:
    a= int(input('int1'))
    b= int(input('int2'))

    print('a/b=',a/b)
    a=[1,2]
    print(a[3])

except Exception as e:
    pass # 특정 에러발생할 경우 통과
         # 오류 회피하기

#finally 에러와 상관없이 무조건 실행하기 위한 키워드
finally:
    print('무조건 실행하는 부분')


#예외를 강제로 발생시키는 경우
#raise 명령어를 사용한다.


def rsp(a,b):
    str1 = ['R','S','P']

    if a not in str1:
        raise ValueError
   
    if b not in str1:
        raise ZeroDivisionError

try:
    rsp('R','Se')
except ValueError:
    print('Wrong value')

#반복문
#StopIteration

school ={'1':[1,2,3,4,5],
         '2':[5,4,7,8,1]}

#7이 넘는 학새을 발견하면 반복을 종료
#예외 발생 시키기

#1,2 7이 넘는 학생이 존재한다.

try:
    for num,stu in school.items():
        for i in stu:
            if i>7:
                print(num,'exsist')
                raise StopIteration

except StopIteration:
    print('Termination with exception')
   

#사용자 예외 만들기
#프로그래머가 직접 예외를 만든다
#Exception클래스 (예외에 대한 클래스 부모)
#상속

class MyError(Exception):
    def __init__(self,value):
        self.value = value

    def __str__(self):
        return self.value

try:
    raise MyError('Errormade')

except Exception as e:
    print(e)
    print(type(e))
   

#계좌
#accountNo : String
#ownerName : String
#balance : int

#deposit : 입금
#withdraw : 출금, 잔액이 부족하면 예외 발생

#checking_account
#cardNo : String
#pay() : 카드번호, 잔액이 부족하면 예외 처리

#예외 처리하는 클래스 먼저 생성
class MyExcept(Exception):
    def __init__(self,value):
        self.value = value

    def __str__(self):
        return value

class Account:
    def __init__(self,no,name,bal):
        self.no = no
        self.name  = name
        self.bal = bal

    def deposit(self,money):
        self.balance += money
        print('입금액>',self.balance)

    def withdraw(self,money):
        if(money > self.balance):
            return 'no money'
        else:
            return self.balance -= money
       

class checking(Account):
    def __init__(self,no,name,bal,cardno):
        self.bal = bal
        self.no = no
        self.name = name
        self.cardno = cardno

    def pay(no,money):
        if:
            print('카드번호 또는 잔액 확인')
        else:
            return withdraw(money)

#main()
#raise 내가 만든 예외 발생(메시지)
a= checking()
#결제를 할 때 돈이 부족, 카드번호가 없는 경우 예외
a.pay()
#출금시 돈이 부족하다면 예외
a.withdraw()

try:
    raise MyExcept()


#재고관리 클래스 : StockManager 클래스
#재고수량 변수 :  stockNum
#재고수량 파악하여 수요보다 많으면 예외 발생 : subStock

class StockManager:
    def __init__(self,stockNum):
        self.stockNum = stockNum

    def substock(self,amount):
        if amount > self.stockNum:
            print('재고부족')
        else:
            print('남은재고')
            return self.stockNum -= amount

#main()
#예외처리클래스
stock = StockManager(1000):
print(stock.substock(100))

댓글