-
Python) Python의 예외처리Programming/Python 2019. 7. 31. 00:09
TIL(Today I learned) 을 기록하는 공간입니다.
잘못된 내용 또는 부족한 내용에 대한 수정 및 지적 환영합니다.
#Python의 Exception처리
오늘은 python에서 Exception(예외)처리를 하는 방법에 대해서 공부해본다.
예외처리라고 함은 흔히들, 간단하게 말해서
정상동작이 아닌 다른 동작에 대한 처리를 말한다.
height = "170cm" number = (int)height #>> height은 "170cm"로 int형의 데이터가 아니기 때문에 int로 casting(형변환)을 할 경우 에러가 발생한다. """ Traceback (most recent call last): File "errTest.py", line 2, in <module> number = int(height) ValueError: invalid literal for int() with base 10: """
이처럼 원래는 number라는 변수에는 숫자가 들어가야한다.
그래서 height라는 변수가 int형으로 casting (형변환) 되어 저장하는 과정이 필요하고,
이를 정상동작이라고 할 수 있다.
만약 height 안에 숫자가 아닌 문자형 데이터가 들어갔을 경우, casting을 할 수 없기 때문에,
예기치 못한 에러, 즉 정상동작이 아닌 경우가 발생하게 된다.
이 경우에는 어떻게 처리하면 좋을 것인가.에 대한 내용을 기술하는 것이 Exception 처리라고 할 수 있다.
height = "170cm" try: number = int(height) except ValueError: print(height+"은(는)숫자가 아닙니다") #출력>> 170cm은(는) 숫자가 아닙니다.
앞 문제에 대한 Exception 처리는 이와 같이 할 수 있다.
일단 에러가 발생할 여지가 있는 부분을 try 블럭으로 감싼다.
그리고 그 아래, except와 함께 발생할 가능성이 있는 에러의 이름을 적고,
에러발생시 어떤 처리를 하면 좋을지 기술하면 된다.
이러한 처리를 하게 될 경우, 에러가 발생했을때, except 부분으로 넘어가서
에러메세지 대신 사용자가 지정한 동작을 할 수 있게 된다.
만약 어떤 에러가 발생하는지, except 뒤에 작성할 에러의 이름을 알지 못한다면!
그러한 경우에는 어떻게 하면 좋을까?
try: #에러발생 name = "walnuty" age = (int)name #에러발생 list = [1,2,3] print(list[3]) except: print("에러가 발생했습니다")
사실 try except 문을 쓸 때, 위 예제처럼 except 뒤에 이름을 쓰지 않고
바로 : 으로 마무리해도 예외처리가 되기는 한다.
그러나 위 코드에서는 두 개의 에러가 발생한다.
먼저 문자형을 숫자형으로 casting할 때 발생하는 ValueError
>>ValueError: invalid literal for int() with base 10: 'walnuty'
그리고 범위 내에 존재하지 않는 list값을 호출했을때 발생하는 IndexError
>>IndexError: list index out of range
위 방식으로 except: 만을 이용하여 예외 처리를 할 경우
(에러발생의 가능성을 인지하지 못한 상태라고 가정하자.)
어떠한 에러든 간에, "에러가 발생했습니다"라는 메세지를 출력하기 때문에
castring할때 ValueError가 발생하는지, list에서 값을 꺼낼때 ValueError가 발생하는지
명확하게 알 수 없다.
그래서 발생할 수 있는 에러의 이름을 정확하게 알지 못하는 경우
다음과 같은 방법을 이용할 수 있다.
try: #에러발생 name = "walnuty" age = int(name) #에러발생 list = [1,2,3] print(list[3]) except Exception as ex: print("에러가 발생했습니다",ex)
위와 같은 방법을 사용하여 예외처리를 수행할 경우, except부분으로 넘어갔을때,
ex에 발생한 에러의 정보를 담고, 이것을 출력문과 함께 뿌려준다.
결과는 어떻게 될까?
>>출력 : 에러가 발생했습니다 invalid literal for int() with base 10: 'walnuty'
이렇게 에러메세지를 함께 출력함으로써 에러발생 부분을 확인할 수 있게 된다.
'Programming > Python' 카테고리의 다른 글
Python) Package와 Module (0) 2019.07.28