예외처리

try except

try:
    # 에러가 발생할 가능성이 있는 코드
except Exception: # 에러 종류
    #에러가 발생 했을 경우 처리할 코드
  • 경우에 따라 예외 처리 대신 if else를 사용 할 수 있다.

내장예외

  • 예외 형으로 인쇄된 문자열은 발생한 내장 예외의 이름입니다.

  • 이것은 모든 내장 예외들의 경우는 항상 참이지만, 사용자 정의 예외의 경우는 꼭 그럴 필요는 없습니다.

  • 표준 예외 이름은 내장 식별자입니다 (예약 키워드가 아닙니다).

  • 예시

    • ValueError

    • IndexError

    • ImportError

    • ZeroDivisionError

예외의 이름을 모를 때 as

  • 예외의 이름을 모르는 경우에는 Exception as를 통해 해결할 수 있습니다.

try:
    # 에러가 발생할 가능성이 있는 코드
except Exception as ex: # 에러 종류
    print('에러가 발생 했습니다', ex) 
    # ex는 발생한 에러의 이름을 받아오는 변수

일부러 예외를 발생시키고 싶을 때 raise

  • 사용자가 직접 에러를 발생시키는 기능

  • raise Exception 에러 종류

  • 많이 사용하면 코드를 읽기 어려워진다.

def rsp(mine, yours):
    allowed = ['가위', '바위', '보']
    if mine not in allowed:
        raise ValueError
    if yours not in allowed:
        raise ValueError
rsp('가위', '바')
function rsp(mine, yours) {
    const allowed = ['가위', '바위', '보']
    if(!allowed.includes(mine)){
        throw new Error(mine)
    } else if (!allowed.includes(yours)){
        throw new Erorr(yours)    
    }
}
rsp('가위','바')
school = {
    '1반': [172, 185, 198, 177, 165, 199],
    '2반': [165, 177, 167, 180, 191],
}
try:
    for class_number, students in school.items():
        for student in students:
            if student > 190:
                print(class_number '190을 넘는 학생이 있습니다.')
                raise StopIteration
except StopIteration:
    print('실행종류')

내 예외 만들기

예외 정의하기

  • 사용자가 직접 예외처리를 하면 코드의 직관성을 높일 수 있다.

  • 파일을 하나 만들어 예외를 정의

  • Exception 클래스를 상속받아 만든다

    • 에러의 최상위 클래스는 Exception 클래스

class UnexpectedRSPValue(Exception):
    """가위 바위 보 가운데 하나가 아닌 값인 경우에 발생하는 에러"""

Last updated