예외처리(파이썬)

Variety_·2021년 10월 11일
0

Python

목록 보기
11/12

예외처리


  • 예외 : 문법적인 문제는 없으나 예상하지 못한 문제로 프로그램 실행이 어려운 상태
# ZeroDivisionError : division by zero ! 
def div(n1, n2):
    return n1 / n2

div(10, 0)
  • 예외 관련 클래스는 Exception 클래스를 상속한다.
  • ArithmeticErro, EnviromentError(IOError), LookupError(IndexErro), SyntaxError 등등

예외처리

예외처리: 발생된 예외를 별도 처리함으로써 프로그램 전체의 실행에 문제가 없게함.

  • try ~ except : 예외 발생 예상 구문을 try~except로 감싼다.
n1 = 10; n2 = 0
try:
    print(n1 / n2)
except:
    print("예상하지 못한 예외가 발생했습니다.")
    print("다음 프로그램이 정상 실행됩니다.")
print(n1 * n2)
  • try~except ~ else : 예외가 발생하지 않은 경우에 실행하는 구문, 꼭 필요하진 않음
nums = []
n = 1
while n < 6:
    
    try:
        num = int(input("input number : "))
    
    except:
        print("예외발생")
        continue
    
    # 예외가 발생하지 않으면 else 내용 실행
    else:
        if num % 2 ==0:
            nums.append(num)
            n += 1
        else:
            print("입력한 숫자는 홀수 입니다 다시 입력하세요")
            continue

finally

  • finally : 예외 발생과 상관없이 항상 실행한다.
try:
    inputData = input('inpt number')
    numInt = int(inputData)
except:
    print('exception raise')
    numInt = 0
else:
    if numInt % 2 == 0:
        print("even")
    else:
        print("odd")
finally:
    print(f"inputData : {inputData}") # 항상 실행된다

Exception 클래스

  • Exception 클래스 : 예외를 담당하는 클래스
num1 = int(input("num1"))
num2 = int(input("num2"))

try:
    print(f"num1 / num2 : {num1/num2}")
# 어떤 예외인지 출력해줌    
except Exception as e:
    print(f"exception : {e}")
  • raise : raise 키워드를 사용하면 예외를 발생시킬 수 있다.
def divCal(n1, n2)
	if n2 != 0:
    	print(n1 / n2)
	else:
    	raise Exception("0으로 나눌 수 없습니다.")

num1 = int(input("num 1"))
num2 = int(input("num 2"))        
try:
    divCal(num1, num2)
except Exception as e:
    print(f"Exception : {e}")

사용자 예외 클래스

  • 예외 클래스를 직접 만들수도 있음
  • Exception 클래스를 상속해서 사용자 예외 클래스를 만들 수 있다.
class NotUseZeroException(Exception):
    
    def __init(self, n):
        super.().__init__(f'{n}은 사용할 수 없습니다')
        
def divCal(num1 , num2):
    
    if num2 == 0:
        raise NotUseZeroException(num2)
    else:
        print(f"{num1} / {num2} = {num1 / num2}")

0개의 댓글