
super()로 상위 클래스를 불러올 때 먼저 상속받는(앞에 써있는) 클래스가 지정된다.
abc : abstract base class
@abstractmethod: 추상 메서드 지정
from abc import ABCMeta
from abc import abstractmethod
class AirPlane(metaclass=ABCMeta):
@abstractmethod # 빈 메서드,정의되지 않은 객체 생성시 오류 발생
def flight(self):
pass
def forward(self):
print('전진')
class AirLiner(AirPlane):
def __init__(self, c):
self.color = c
def flight(self):
print('시속 400km/h 비행')
al = AirLiner('red')
al.flight() # 시속 400km/h 비행
al.forward() # 전진
eveList = []; oddList = []; floatList = []; dataLise = []
n = 1
count = 0
while n < 6:
try:
data = input('input number: ')
num = float(data)
except:
print('오류 발생')
continue # 오류 발생시 아래 else문을 실행하지 않고 위로(try문) 올라가 다시 실행
else:
if num - int(num) != 0:
floatList.append(num)
elif num % 2 == 0:
eveList.append(int(num))
else:
oddList.append(int(num))
n += 1
dataList.append(data)
finally:
count += 1
print(f'eveList: {eveList}')
print(f'oddList: {oddList}')
print(f'floatList: {floatList}')
print(f'dataList: {dataList}')
print(f'입력시도: {count}')
~ else 뒤에는 try에서 통과됐을 때 이후 실행된다. (try~except 뒤에 사용)
finally 뒤에는 항상 실행된다!(try에서 오류가 발생해도, else문이 실행된 이후에도)
try:
print(f'{num1} / {num2} = {num1 / num2}')
except Exception as e:
print(f'Exception: {e}') # 0으로 나눌 시 'Exception: division by zero' 출력
def divCal(n1, n2):
if n2 != 0:
print(f'{n1} / {n2} = {n1 / n2}')
else:
raise Exception('0으로 나눌 수 없습니다.')
num1 = int(input('num1: '))
num2 = int(input('num2: '))
try:
divCal(num1,num2)
except Exception as e:
print(f'Exception: {e}') # 0으로 나눌 시 'Exception: 0으로 나눌 수 없습니다.' 출력
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]}') # 오류 내용 출력
if e.args[1] == 1: # 오류 구분에 따라 다른 함수 실행
sendMMS(msg)
elif e.args[1] == 2:
sendSMS(msg)
class NotUseZeroException(Exception):
def __init__(self, n):
super().__init__(f'{n}은 사용할 수 없습니다.')
def div_cal(n1, n2):
if n2 == 0:
raise NotUseZeroException(n2)
else:
print(f'{n1} / {n2} : {n1 / n2}')
inputNum1 = int(input('num1: '))
inputNum2 = int(input('num2: '))
try:
div_cal(inputNum1, inputNum2)
except NotUseZeroException as e:
print(e)