Exception

rang-dev·2020년 5월 31일
0

Exception

코드에서 의도하지 않은 에러가 일어나는 경우 해당 에러를 예외처리하여 다른 로직을 실행하게 함으로써 코드가 종료되지 않도록 처리하는 것: try.. except..구문 사용

  • try:
    • 오류가 발생했을 때 예외처리를 하고 싶은 코드들을 넣는다.
  • except [ERROR_NAME]:
    • 특정 에러를 지정하여 예외 처리한다.
  • except Exception:
    • 모든 에러를 예외처리함
    • as 문을 써서 해당 exception의 객체를 받아서 정보를 더 얻을 수 있다.
  • else:
    • 예외가 발생하지 않았을때 실행된다.
  • finally:
    • exception 발생 여부와 관계없이 맨 마지막에 무조건 실행된다.

Code


# 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"으로 하니 예외가 제대로 처리되는 것을 확인할 수 있었다.

profile
지금 있는 곳에서, 내가 가진 것으로, 할 수 있는 일을 하기 🐢

0개의 댓글