◾예외처리
에러
: 문법적인 문제와 같이 실행이 되지않게 하는 문제
예외
: 문법적인 문제는 없으나 실행 중 발생하는 예상하지 못한 문제
- 예 : ZeroDivisionError
- 예외 종류 : 예외 관련 클래스는
Exception 클래스
를 상속
- ArithmeticError(-> ZeroDivisionError)
- EnvironmentError(-> IOError)
- LookupError(-> IndexError)
- SyntaxError(-> IndentationError)
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문
을 추가한 구문
nums = []
n = 1
while n < 6:
try:
num = int(input('input number : '))
except:
print('예외 발생!')
continue
else:
nums.append(num)
n += 1
print(nums)
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 클래스
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))
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)