파이썬 중급 - 예외처리

이상해씨·2021년 10월 8일
0

자료구조, 알고리즘

목록 보기
17/20

◾예외처리

  • 에러 : 문법적인 문제와 같이 실행이 되지않게 하는 문제
  • 예외 : 문법적인 문제는 없으나 실행 중 발생하는 예상하지 못한 문제
    • 예 : ZeroDivisionError
    • 예외 종류 : 예외 관련 클래스는 Exception 클래스를 상속
      • ArithmeticError(-> ZeroDivisionError)
      • EnvironmentError(-> IOError)
      • LookupError(-> IndexError)
      • SyntaxError(-> IndentationError)
# 예외 : ZeroDivisionError
first = 10
second = 0
# 예외 발생
print(first / second)
  • 예외 처리 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문 : 기존 try ~ except 문에 예외가 발생하지 않은 경우 실행하는 else문을 추가한 구문
# else
nums = []

n = 1
while n < 6:
    try:
        num = int(input('input number : '))
    except:
        print('예외 발생!')
        continue
    else:
        nums.append(num)
        n += 1

print(nums)
  • finally : 예외 발생과 상관없이 항상 실행
# finally
try:
    inputData = input('input number:')
    numInt = int(inputData)
except:
    print('exception raise!!')
    print('not number!!')
    numInt = 0
else:
    if numInt % 2 == 0:
        print('inputData is even number!!')
    else :
        print('inputData is odd number!!')
finally:
    print('inputData : {}'.format(inputData))

◾Exception 클래스

  • Exception : 예외를 담당하는 클래스
# Exception
num1 = 10; num2 = 0
try:
    print('num1 / num2 : {}'.format(num1 / num2))
except Exception as e:
	# 에러 정보 출력
    print('exception : {}'.format(e))

print('num1 * num2 : {}'.format(num1 * num2))
print('num1 - num2 : {}'.format(num1 - num2))
print('num1 + num2 : {}'.format(num1 + num2))
  • raise 키워드 : 예외 발생 키워드
# raise 키워드
def divCalculator(n1, n2):
    if n2 != 0:
        print(f'{n1} / {n2} = {n1 / n2}')
    else:
        raise Exception('0으로 나눌 수 없습니다.')

num1 = 10; num2 = 0
try:
    divCalculator(num1, num2)
except Exception as e:
    print('Exception : {}'.format(e))

◾사용자 예외 클래스

  • 사용자 예외 클래스 : Exception 클래스를 상속해서 만들 수 있다.
# 사용자 예외 클래스
class NotUseZeroException(Exception):
    def __init__(self, n):
        super().__init__(f'{n}은(는) 사용할 수 없습니다!!')

def divCalculator(num1, num2):
    if num2 == 0:
        raise NotUseZeroException(num2)
    else:
        print(f'{num1} / {num2} = {num1 / num2}')

num1 = int(input('input number : '))
num2 = int(input('input number : '))

try:
    divCalculator(num1, num2)
except NotUseZeroException as e:
    print(e)
profile
후라이드 치킨

0개의 댓글