IT is Smart
파이썬 try-except문으로 에러 처리하기, Python handles error using try-except 본문
파이썬 try-except문으로 에러 처리하기, Python handles error using try-except
달인최선 2016. 9. 10. 08:53이번에는 에러를 처리하는 방법을 알아보겠습니다.
while True: try: number = int(input("What's your fav number hoss?\n")) print(18/number) break except ValueError: print("Make sure and enter a number") # except ZeroDivisionError: # print("Don't pick zero") except Exception as e: print(str(e)) break finally: print("loop complete")
이 코드는 외부에서 입력을 받아서 계산한 결과를 출력하는 기능을 구현한 것입니다.
number = int(input("What's your fav number hoss?\n")) print(18/number)
지금까지의 스타일 대로라면 위의 2줄만으로도 필요한 기능은 다 구현이 된 것입니다.
하지만, 위의 코드는 코드가 정상적으로 동작하지 않을 수 있는 가능성이 존재합니다.
하나는 입력값을 0으로 받는 경우 18을 0으로 나누게 되어 계산오류가 발생합니다.
또 하나는 숫자 이외의 값이 입력되어도 나누기 계산을 할 수가 없습니다.
그래서 위의 2줄로만 된 코드를 동작시킨 후 0이나 알파벳문자를 입력하면 에러메시지를 출력하고 종료되는 것을 확인할 수 있습니다.
제일 위의 코드는 이렇게 에러가 발생하는 상황에서 바로 프로그램이 종료되는 것이 아니고 해당 에러에 대한 메시지를 출력한 후 계속해서 다음 입력을 대기하도록 구현한 것입니다.
첫번째 줄의 while True: 는 조건이 True인 동안 계속 반복하라는 의미로 조건을 True로 고정했기 때문에 의도적으로 무한반복하도록 지정한다는 의미가 됩니다.
이렇게 무한반복되더라도 로직의 오류가 실행되어서 에러가 발생되면 프로그램은 무한반복을 중단하고 종료됩니다.
그래서 에러가 발생하더라도 종료되지 않도록 하기 위해 try-except문을 사용했습니다.
try:는 에러가 발생할 것으로 예상되는 연산(또는 로직)의 앞에 선언해 줍니다. 그러면 try: 코드 이후의 로직에서 에러가 발생하면 except문을 찾아서 이동하게 됩니다.
except:
이렇게만 선언해도 에러가 발생하면 이 부분을 찾아서 이 부분 아래의 코드가 진행이 되게 됩니다.
여기서는 해당 에러에 대한 정보를 출력해서 확인하는 것이 목적이기 때문에 아래와 같이 에러정보를 가지고 있는 Exception클래스를 지정하였습니다.
Exception은 모든 에러의 가장 상위에 해당하는 것으로 모든 에러의 정보를 리턴해 줍니다.
하지만 에러의 형태에 따라서 다른 처리를 해주어야 할 경우도 있습니다. 이 사례에서는 숫자가 아닌 값이 입력되었을 때 숫자값을 입력해야 한다는 메시지를 명확히 표시하고 싶습니다. 이런 경우 except문을 추가로 선언할 수 있습니다.
except ValueError: print("Make sure and enter a number")
ValueError클래스가 바로 값에 오류가 있을 때 발생하는 Exception클래스의 하위 Error클래스입니다. ValueError로 except선언을 별도로 하지 않은 경우는 아래쪽의 except Exception as e:로 처리가 넘겨져서 시스템 자체의 에러메시지를 출력해 줍니다.
수학적으로 0으로 나눌 수 없는데 0으로 나누는 연산을 시도하면 발생하는 Exception클래스는 ZeroDivisionError클래스입니다.
이상의 내용을 참조하시면 try-except문을 사용하시면 다양한 로직에서 에러처리를 쉽게 할 수 있겠습니다.
여기까지 입니다~
'Programming > Python Basic' 카테고리의 다른 글
파이썬 Class 초기화하기, Initialize a class (0) | 2016.09.10 |
---|---|
파이썬 Class 구현하기, define and use class (0) | 2016.09.10 |
파이썬 requests모듈로 웹크롤링하기, web crawling using requests (3) | 2016.09.10 |
파이썬 requests모듈 사용하기, use requests module (0) | 2016.09.09 |
파이썬으로 인터넷의 주가정보 수집하기, get stock information from Internet (3) | 2016.09.09 |