ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • python 예외처리 방법, 오류 대응하는 법
    programing/Python 2017. 9. 27. 01:00

    python으로 코딩을 하다보면 의도치 않은 에러가 발생을 했거나, 에러를 발생시켜야하는 경우가 발생하게 된다. 이 때 사용되는 코드로 'try'와 'except'를 사용하게 된다. 예제를 통해서 알아보자.



    1. 오류에 대한 대처

    python IDLE 창에서 'sdkllk'와 같은 임의의 문자를 입력해보았다. 잘 알고 있듯이 NameError가 발생하게 된다. 'sdkllk'에 대해서 아무런 정의를 하지 않았고, 선언하지 않았기 때문에 위와 같은 에러가 발생한다. 이렇게 됐을 경우 예외처리를 하기 위해서는 아래와 같이 코드를 작성해볼 수 있다.


    1
    2
    3
    4
    try:
        이건 에러가 날게 분명해
    except NameError:
        print("NameError가 났으니까 오류를 해결해")
    cs


    위와 같이 코드를 작성해서 실행시키면 결과는 당연히 "NameError가 났으니까 오류를 해결해"라는 메시지가 출력될 것이다.


    except [오류이름]

    위와 같은 명령어로 작성을 하게 되면 해당 오류에 대해서 어떻게 처리할 것인지 코딩을 할 수 있다.

    중복으로 'except'를 사용할 수 있기 때문에 각 각의 오류에 대해서 대처할 수 있게 된다.


    2. 오류회피

    만약 모든 상황의 에러를 모두 회피하고 싶다면 어떻게 해야 될까? 답은 매우 간단하다.

    'pass'를 사용하면 된다.


    1
    2
    3
    4
    try:
        이건 에러가 날게 분명해
    except:
        pass
    cs


    네임에러가 발생했는데도 불구하고 화면에는 아무런 내용이 표시되지 않는다. 어떠한 오류가 발생했다고 하더라도 그냥 넘기라는 것이다. 


    3. 오류 강제로 발생시키기

    'raise' 명령어를 이용해서 오류를 강제로 발생시킬 수 있다.

    1
    2
    3
    class dog:
        def working(self):
            raise NotImplementedError
    cs

    dog라는 클래스를 상속받아 자식 클래스를 무조건 working이라는 함수를 만들고 싶을 경우 위와 같이 작성할 수 있다. 따라서 자식 클래스의 working 함수를 구현하지 않은 채로 호출한다면 오류가 발생하게 되는 것이다.


    4. 오류 만드는 방법

    가장 간단한 방법으로 클래스로 만드는 방법이 있다. 클래스 네임은 본인이 원하는 오류이름으로 정하고 아래와 같이 작성을 하면 된다.

    1
    2
    class Error(Exception):
        pass
    cs


    raise Error() 를 입력하게되면 본인이 원하는 오류가 출력되게 된다. 위와 같은 방법으로 프로그램을 무한 루프시켜야할 때 혹은 사용자에게 서비스를 제공할 때 필수적으로 사용되는 기법들이기 때문에 꼭 숙지하고 있길 바란다.


    5. 오류와 관계없이 무조건 실행돼야 하는 경우

    try ... finaly문을 사용하면 오류 발생 여부와 관계없이 무조건 실행이 된다. 필요에 따라서 작성하도록 한다.


    6. 정리

    1. 예외처리를 위한 기본 분법은 try ... except

    2. 'except'는 중복으로 작성할 수 있다.

    3. 오류를 강제로 발생시키기 위해서는 'raise'문을 이용한다.

    4. 나만의 오류를 만들기 위해서는 ' class [오류이름](Exception):    pass' 를 사용한다.


Designed by Tistory.