Python Basic 19 | 예외 처리

devheyrin·2022년 1월 10일
0

python basic

목록 보기
19/19
🌟 예외 처리는 에러가 발생하더라도 스크립트의 실행을 중단하지 않고 계속 실행하고자 할 때 사용한다!

예외 발생시키기

파이썬에서 정해진 예외가 아니라 직접 예외를 발생시킬 수 있다.

raise로 예외를 발생시키면 raise아래에 있는 코드는 실행되지 않고 바로 except로 넘어간다.

Exception 대신 RuntimeError, NotImplementedError 등 다른 예외를 사용해도 된다.

raise 예외('에러메시지')

try:
    x = int(input('3의 배수를 입력하세요'))
    if x % 3 != 0:
        raise Exception('3의 배수가 아닙니다.')
    print(x)
except Exception as e:
    print('예외가 발생했습니다.', e) 

현재 예외를 다시 발생시키기

except 안에서 raise를 사용하면 현재 예외를 다시 발생시킨다.

def three_multiple():
    try:
        x = int(input('3의 배수를 입력하세요: '))
        if x % 3 != 0:                                 # x가 3의 배수가 아니면
            raise Exception('3의 배수가 아닙니다.')    # 예외를 발생시킴
        print(x)
    except Exception as e:                             # 함수 안에서 예외를 처리함
        print('three_multiple 함수에서 예외가 발생했습니다.', e)
        raise    # raise로 현재 예외를 다시 발생시켜서 상위 코드 블록으로 넘김
 
try:
    three_multiple()
except Exception as e:                                 # 하위 코드 블록에서 예외가 발생해도 실행됨
    print('스크립트 파일에서 예외가 발생했습니다.', e)

raise에 다른 예외를 지정하고 에러 메시지를 넣을 수도 있다.

				if x % 3 != 0:
            raise Exception('3의 배수가 아닙니다.')
        print(x)
    except Exception as e:
        print('three_multiple 함수에서 예외가 발생했습니다.', e)
        raise RuntimeError('three_multiple 함수에서 예외가 발생했습니다.')

assert로 예외 발생시키기

assert 조건식

assert 조건식, 에러메시지

형태로 작성하며, 조건식이 거짓일 때 AssertionError 예외를 발생시키고, 조건식이 참이면 그냥 넘어간다.

디버깅 모드에서만 실행되며, 파이썬은 기본적으로 디버깅 모드이다.

x = int(input('3의 배수를 입력하세요: '))
assert x % 3 == 0, '3의 배수가 아닙니다.'    # 3의 배수가 아니면 예외 발생, 3의 배수이면 그냥 넘어감
print(x)

사용자 정의 예외 만들기

  1. Exception을 상속받아서 새로운 클래스를 만든다.
  2. init메소드에서 super class의 init메서드를 호출하면서 에러 메시지를 넣어준다.
class NotThreeMultipleError(Exception):    # Exception을 상속받아서 새로운 예외를 만듦
    def __init__(self):
        super().__init__('3의 배수가 아닙니다.')
 
def three_multiple():
    try:
        x = int(input('3의 배수를 입력하세요: '))
        if x % 3 != 0:                     # x가 3의 배수가 아니면
            raise NotThreeMultipleError    # NotThreeMultipleError 예외를 발생시킴
        print(x)
    except Exception as e:
        print('예외가 발생했습니다.', e)

클래스를 구현하지 않고, 예외 발생시킬때 메시지를 넣어줄 수도 있다.

class NotThreeMultipleError(Exception):    # Exception만 상속받고
    pass                                   # 아무것도 구현하지 않음

def three_multiple():
    try:
        x = int(input('3의 배수를 입력하세요: '))
        if x % 3 != 0:                     # x가 3의 배수가 아니면
            raise NotThreeMultipleError('3의 배수가 아닙니다.')     # NotThreeMultipleError 예외를 발생시킴
        print(x)
    except Exception as e:
        print('예외가 발생했습니다.', e)
profile
개발자 헤이린 🔜 프로덕트 매니저로 나아가는 중!

0개의 댓글