Summarization
- 추상 클래스는 메서드 구현을 강제(강요)하는 클래스로, 특정 기능을 상속 받았을 때, 각자의 필요성에 맞게 수정하여 사용하기 위함이다.
- 예외(Exception)는 예상하지 못한 문제로 프로그램 실행이 어려운 상태를 나타냄
- 예외 처리 : 발생된 예외를 별도 처리함으로써 프로그램 전체의 실행의 문제가 없도록 함. try~except, try ~ except ~ else, finally 구문 이용
- Exception Class : 예외를 담당하는 클래스로, 어떤 error를 발생했는지 알 수 있음. 또한 raise 키워드를 사용하여 원하는 예외 문구를 출력할 수 있다.
- Exception 클래스를 상속해서 User Exception Class를 만들 수 있다.
Contents
- 추상 클래스
- 상위 클래스에서 하위 클래스에 Method 구현을 강제(강요)한다.
- 추상클라스 사용 이유 : 특정 기능을 상속 받았을 때, 각자의 필요성에 맞게 수정하여 사용할 수 있다.
from abc import ABCMeta
from abc import abstractmethod
- 예외(Exception)
- 예상하지 못한 문제로 프로그램 실행이 어려운 상태. 즉. 문법적인 문제는 없으나 실행 중 발생하는 예상하지 못한 문제
※ 에러(Error)와는 차이가 있음
- 예외 종류
Exception |
---|
ZeroDivisionError - ArithmeticError |
IOError - EnvironmentError |
IndexError - LookupError |
IndentationError - SyntaxError |
- try ~ except
- 예외 발생 예상 구문을 try ~ except로 감싼다
※ try ~ except의 경우 문제가 발생할 구문에 정확히 입력해야 함
n1 = 10 ; n2 = 0
try:
print(n1 / n2)
except:
print('예상치 못한 문제가 발생했습니다.')
print('다음 프로그램이 정상 실행됩니다.')
print(n1 * n2)
print(n1 - n2)
print(n1 + n2)
- try ~ except ~ else
- finally
try ~ except ~ else | 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}')
- Exception Class : 예외를 담당하는 클래스
- 어떤 error를 발생했는지 알 수 있음
- e로 많이 사용
num1 = int(input('input number1 : ')) ; num2 = int(input('input number2 : '))
try:
print(f'num1 / num2 = {num1 / num2}')
except Exception as error:
print('0으로 나눌 수 없습니다.')
print(f'exception : {error}')
print(f'num1 * num2 = {num1 * num2}')
print(f'num1 - num2 = {num1 - num2}')
print(f'num1 + num2 = {num1 + num2}')
- raise : raise 키워드를 이용하면 예외를 발생시킬 수 있다.
def divCalculator(n1, n2):
if n2 != 0:
print('{} / {} = {}' .format(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('Exception: {}' .format(e))
- 사용자 Exception Class : 예외(Exception) 클래스를 직접 커스터마이징 할 수 있음
- Exception 클래스를 상속해서 User Exception Class를 만들 수 있다.
class NotUseZeroException(Exception):
def __init__(self, n):
super().__init__('{}은 사용할 수 없습니다.' .format(n))
def divCalculator(n1, n2):
if n2 == 0:
raise NotUseZeroException(n2)
else:
print('{} / {} = {}' .format(n1, n2, n1 / n2))
num1 = int(input('input number1: ')) ; num2 = int(input('input number2: '))
try:
divCalculator(num1, num2)
except NotUseZeroException as e:
print(e)