(중급) 추상(abstract) 클래스, 예외(Exception)

임경민·2023년 9월 22일
1
post-thumbnail

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 ~ elsefinally
예외 발생시, 발생 안 할 시 구분이와 상관없이 항상 실행할 때 사용
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: # Error 대신 'e'로 많이 사용
    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)

0개의 댓글