[Python] Exception Handling

1 minute read

python-version-3.7.1

Exception Handling (예외처리)

Error 가 발생할 수 있는 구간을 지정하여, 에러 발생구간을 컨트롤 할 수 있다.


try:
    # 에러가 발생할 수 있는 구간
    
except <ErrorType> as <Variable> :  # as 는 생략가능
    # 해당에러 발생시 실행할 코드

except <ErrorType> as <Variable> :
    # 해당에러 발생시 실행할 코드

else:
    # 에러가 발생하지 않았을 경우 실행할 코드

finally:
    # 무조건 실행되는 코드
  • 두번째 이상의 except, else, finally는 생략가능

  • except 는 조건문의 elif처럼 여러개 사용가능

  • as 생략가능
    as를 사용시 왼쪽에 입력된 에러(클래스객체)를 할당받는다.

    Error는 보통 Class 의 형태를 띄고있다.



  • raise : 에러를 발생시키는 명령어다.
raise ValueError

>>> ValueError Traceback (most recent call last)



Practice

try:
    int("example")
    
except:  # Error 의 종류를 명시하지 않았으므로 모든 error
    pass  # 아무것도 하지 않는다.

위와 같이 작성하면 어떠한 에러가 발생하든 무시하고 반복문을 진행시키고,
try 블럭 밖의 코드를 실행하게된다.


try:
    int("example")
    
except ValueError as e:
    print("e")

>>> invalid literal for int() with base 10: 'example'

int("example") 코드가 ValueError 를 발생시킴에 따라 발생에러를 e로 대입받고,
except 의 코드 print("e") 가 실행된 결과이다.


try:
    raise ValueError  # ValueError 를 발생시킨다.

except StopIteration:
    print("StopIteration Error 발생한 경우 출력")

except:
    print("StopIteration 이외의 Error 발생할 경우 출력")
    
else:
    print("else : try ~ except 사이의 코드에서 에러가 발생하지 않을 경우 출력")

finally:
    print("Finally : 무조건 출력")

print("try 블럭 밖 : try 구문이 끝남에 따라 출력")

>>> 'StopIteration 이외의 Error 발생할 경우 출력'
>>> 'Finally : 무조건 출력'
>>> 'Finally : try 블럭 밖, try 블럭이 끝남에 따라 출력'



Make Custom Error

Exception 클래스를 상속받아 에러를 직접 만들 수 있다.

class CustomError(Exception):
    pass

직접 만든 에러를 발생시켜보겠다.

raise CustomError

>>> CustomError:

에러가 정상적으로 작동한다.
이런 경우에는 아무런 메세지도 출력되지 않는다.
에러에서 본인이 원하는 메세지가 출력되도록 하는 방법은 두가지가 있다.


  • 첫번째 방법: argument로 본인이 원하는 문자열 주기
raise CustomError("Hi")

>>> CustomError: Hi


  • 두번째 방법: 작성한 CustomError의 __str__ 메서드를 작성하기
class CustomError(Exception):
    def __str__(self):
        return "Some String"
raise CustomError

>>> CustomError: Some String

__str__ 을 작성하게 되면 argument로 주어진 값은 무시된다.

Leave a comment