• 2020. 7. 30.

    by. 윈썸지니

    반응형

    출처:pixabay

    이번 포스팅은 오류를 직접 발생 시키는 방법에 대한 내용입니다.

     

    오류가 나지 않아야 하는데 일부러 오류를 발생 시킨다? 이해가 가지 않을 것 입니다.

    하지만 예제를 보면 왜 이런 구문을 만들었는지 이해 하실 것 입니다.

     

    본 포스팅은 예외 처리 try except  구문에 대한 내용을 알고 있어야 합니다.

    만약 잘 모르시면 이전 포스팅을 먼저 참고해 주세요.

     

    2020/07/29 - [IT 이야기 공간/프로그램 언어] - 파이썬(python) 오류 예외 처리(try, except, finally)

     

    파이썬(python) 오류 예외 처리(try, except, finally)

    이번 포스팅은 파이썬 프로그램에서 오류가 발생시 오류를 제어하는 방법에 대한 포스팅 입니다. 프로그램 개발 시 오류가 발생하면 프로그램이 자동으로 중지 됩니다. 하지만 때로는 오류가 ��

    jinisbonusbook.tistory.com

    먼저 오류를 발생시키기 전 오류를 무시하는 방법에 대해 알아봅니다.

    이전 포스팅에서 예제로 사용했던 error_test.pyerror_test1.py 로 복사합니다.

    이전 내용을 아래 예제와 같이 수정합니다.

    from datetime import datetime

    dtval = input( '시간 입력:YYYY-MM-DD.hh:mm:ss ' )


    try:

        stime = datetime.strptime( dtval, '%Y-%m-%d.%H:%M:%S' )

        print("입력일자:%s" % dtval )


    except
    ValueError as err:

        pass

    CMD 창을 열어서 소스 파일이 있는 디렉토리로 이동 한 후 예제를 실행해 봅니다.

    아래와 같이 날짜 형식이 맞이 않게 입력을 해도 오류 발생시 무시하는 pass 구문이 있어서 오류가 무시되어 아무 결과도 출력하지 않습니다.

    C:\py_test>python error_test1.py

    시간 입력:YYYY-MM-DD.hh:mm:ss 2020

    위의 예제와 같이 오류를 무시하려면 except 구문에 pass 를 사용하면 됩니다.

    이제 다시 원래 해 보려고 했던 일부러 오류를 발생 시키기에 대한 내용입니다.

    오류를 발생 시키려면 raise를 사용하면 됩니다.

     

    raise  사용 예제 ( error_raise.py)

    try:

        x = int(input('짝수를 입력하세요: '))

        if x % 2 != 0: raise Exception('짝수가 아닙니다.')

        print("입력한 숫자는 %d 입니다." % x)


    except Exception as e:

        print('오류 내역:', e)

    위의 예제는 숫자를 입력 받아 2로 나누어서 나머지가 0이 아니면 오류를 발생 시키는 예제 입니다.

    먼저 동작 확인을 위해 명령창(CMD) 에서 실행해 봅니다.

     

    정상 동작 확인을 위해 짝수를 입력합니다.

    C:\py_test>python error_raise.py

    짝수를 입력하세요: 4

    입력한 숫자는 4 입니다.

     

    오류를 발생 시키기 위해 홀수를 입력합니다.

    아래 결과에서 raise 구문이 실행되었고 다름의 except 구문에서 Exception 이기 때문에 오류 내역…..” 을 출력하였습니다.

    기본 try except 구문과 마찬가지로 오류가 발생되는 시점의 구문 까지만 실행되므로 입력한 숫자는…..” 은 출력되지 않았습니다.

    C:\py_test>python error_raise.py

    짝수를 입력하세요: 5

    오류 내역: 짝수가 아닙니다

    raise Exception 에서 Exception 대신 다른 오류 코드를 넣어도 됩니다.

     

    raise 를 함수 안에서 사용해도 호출한 구문에 try except 가 있으면 위의 예제와 같이 동작합니다.

    무슨 말인지 예제를 통해 알아봅니다.

     

    위의 예제 error_raise.py 를 아래와 같이 수정합니다.

    def even_num( ):

        x = int(input('짝수를 입력하세요: '))

        if x % 2 != 0: raise Exception('짝수가 아닙니다.')

        print("입력한 숫자는 %d 입니다." % x)


    try:

        even_num( )

    except Exception as e:

        print('오류 내역:', e)

    실행해 봅니다. 실행 방법은 위의 예제와 동일합니다.

    정상 동작 확인을 위해 짝수를 입력합니다.

    C:\py_test>python error_raise.py

    짝수를 입력하세요: 4

    입력한 숫자는 4 입니다

     

    오류를 발생시키기 위해 홀수를 입력합니다.

    C:\py_test>python error_raise.py

    짝수를 입력하세요: 5

    오류 내역: 짝수가 아닙니다.

    첫번째 예제와 결과가 동일 합니다.

     

    참고로 위의 예제는 raise를 사용하지 않아도 가능한 코드 입니다.

    프로그램 작성시 더 유용한 방법으로 작성하면 됩니다.

    raise를 사용하는 것이 더 유용할 경우도 있으니 사용법을 알아 두시면 좋습니다.

     

    위의 예제를 raise 를 사용하지 않고 같은 결과를 얻을 수 있는 코드를 작성해 보았습니다. 참고해 주세요.

     

    예제 error_check.py

    def even_num( ):

        x = int(input('짝수를 입력하세요: '))

        if x % 2 != 0:

            return False

        print("입력한 숫자는 %d 입니다." % x)

        return True

    if even_num( ) == False:

        print('오류 내역:', '짝수가 아닙니다’)

     

    동일한 방법으로 실행하여 결과를 확인합니다.

    C:\py_test>python error_check.py

    짝수를 입력하세요: 4

    입력한 숫자는 4 입니다.

    C:\py_test>python error_check.py

    짝수를 입력하세요: 5

    오류 내역: 짝수가 아닙니다

    프로그램 작성 방법은 매우 다양합니다.  각자 적절한 코드를 가독성 높고, 가볍고, 성능이 좋은 프로그램을 작성하는 것이 좋은 작성 방법입니다.

    반응형