코드에서 의도하지 않은 에러가 일어나는 경우 해당 에러를 예외처리하여 다른 로직을 실행하게 함으로써 코드가 종료되지 않도록 처리하는 것: try.. except..
구문 사용
try:
except [ERROR_NAME]:
except Exception:
as
문을 써서 해당 exception의 객체를 받아서 정보를 더 얻을 수 있다.else:
finally:
# one = 1
def exception_test(index):
a = [1,2,3]
elem = 0
try:
elem = a[index]
except IndexError:
print("IndexError")
elem = -1
except Exception as e:
print(f"Exception: {e}")
elem = -1
else:
print("this case didn't happen exception")
finally:
print("end!!!")
return elem
exception_test(1)
this case didn't happen exception
end!!!
2
exception_test(5)
IndexError
end!!!
-1
exception_test(one)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'one' is not defined
왜 이 경우에는 예외가 처리되지 않은 것일까? 처음에는 try except
에 오류가 있는 줄 알았는데 아니었다. try
안에 코드들이 실행되기 전에 예외가 발생한것이다.
문제는 argument에 있었다. 만약 문자를 넣고 싶었다면 "one"
으로 작성했어야 했는데 one
으로 작성해버렸고one
으로 입력하면 그 이름을 가진 변수를 찾아야하는데 우리는 이러한 변수를 선언한 적이 없기 때문에 NameError
가 발생했다.
만약 one
이라는 변수를 미리 선언했었다면 one
에 담긴 내용에 따라 예외가 처리될 것이다.
exception_test("one")
Exception: list indices must be integers or slices, not str
end!!!
-1
"one"
으로 하니 예외가 제대로 처리되는 것을 확인할 수 있었다.