ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python 기초 #10] 예외 처리
    Programming 기초/Python 2023. 4. 27. 16:54

    * try

    try:
         ...
    except [발생 오류[as 오류 메시지 변수]]:
         ...
    else:     # 오류 발생하지 않은 경우 실행 (try가 참값일 때)
         ...
    finally:     # 무조건 마지막에 실행

    • 여기서 [ ] 기호는 괄호 안의 내용을 생략할 수 있다는 관례 표기법이다.
    • except 발생 오류: 는 오류가 발생했을 때 except문에 미리 정해 놓은 오류 이름과 일치할 때만 except 블록을 수행한다는 뜻이다.
    • except 발생 오류 as 오류 메시지 변수: 는 오류메시지의 냉요을 알고 싶을 때, 발생오류를 지정한 오류 메시지 변수에 담는 것이다.
    try:
        4/0
    except ZeroDivisionError as e:
        print(e)
    -----------------------------------
    division by zero
    • 발생 오류에 에러코드 이름을 모를 때 Exception를 적어두면 Exception이 대부분의 에러코드를 다 포함하므로 오류 발생시 except을 실행할 수 있게 해준다.
    f = open('foo.txt', 'w')
    try:
        # 무언가를 수행한다.
    finally:
        f.close()
    • 예외 발생 여부와 상관없이 finally 절에서 f.close()로 열린 파일을 닫는다.

     

    * 오류 회피하기

    try:
        f=open("나없는파일", 'r')
    except Exception:
        pass
    • pass를 사용하여 오류를 회피하도록 작성할 수도 있다.

     

    *오류 일부러 발생시키기

    • raise 명령어는 오류를 일부러 발생시킨다. 부모클래스를 변형해서 사용하게끔 강제하고 싶을 때, 변형하지 않고 사용하면 오류를 출력하게 만들 때 사용한다.
    class Bird: #부모클래스
        def fly(self):
            raise NotImplementedError
    
    class Eagle(Bird):  #자식클래스
        pass

     

    * 예외 직접 만들기

    • 프로그램 수행 도중 특수한 경우에만 예외 처리를 하기 위해서 예외를 만들어서 사용할 때 유용하다.
    • 파이썬 내장 클래스인 Exception 클래스를 상속하여 만들 수 있다.
    class MyError (Exception):
        pass
    
    
    def say_nickname(nick):
        if nick == '바보':
            raise MyError()
        print(nick)
    
    
    try:
        say_nickname("천재")
        say_nickname("바보")
    except MyError:
        print("허용되지 않는 별명입니다.")
    ---------------------------------------
    천재
    허용되지 않는 별명입니다.
    • 위와 같은 코드를 아래처럼 오류 메시지를 사용하여 만들 수도 있다.
    class MyError (Exception):
        def __str__(self):
            return "허용되지 않는 별명입니다."
    
    
    def say_nickname(nick):
        if nick == '바보':
            raise MyError()
        print(nick)
    
    
    try:
        say_nickname("천재")
        say_nickname("바보")
    except MyError as e:
        print(e)
    ---------------------------------------
    천재
    허용되지 않는 별명입니다.
    • _ _ str_ _ 메서드는 오류 메시지를 print문으로 출력할 경우에 호출되는 메서드이다.

    댓글

Designed by Tistory.