파이썬의 예외 처리(try except)

프로그램을 수행하면서 예상하지 못한 여러가지 일들이 발생할 수 있는데 이를 처리하기 위함

 

예외에는 예상이 가능한 예외와 예상이 불가능한 예외가 있음

 

1) try~except

 

try:

(예외 발생 가능한 코드) ~ 

except (발생가능한 에러종류):

(예외 발생시 대응 가능한 코드)~

 

그림1. try~ except~ 예시

ZeroDivisionError말고 다른 에러를 적으면 프로그램 수행이 안됨

 

파이썬에서 기본적으로 제공하는 indexerror, nameerror, zerodivisionerror, valueerror, filenotfounderror 등이 있음

 

그림2. indexError를 e로 받아 출력한 예시

 

indexerror를 e로 받아서 print(e)하면 그 정보를 출력해줌

 

무슨 에러가 발생할지 모르면 지정하지 않아도 알아서 수행해줌

 

그림3. error에 대해 명시를 안한 경우

 

무슨 에러가 날지 모를 때 except Exception as e로 써도 됨

 

그림4. Exception as e로 무슨 에러인지 모를 때 처리가능

 

2) try~except~else

 

try:

(예외가 발생할 수 있는 코드)~

 

except:

(예외가 발생할때 동작)~

 

else:

(예외가 발생하지 않을 때 동작)~

 

그림5. try~except~else 예시

 

3) try~except~finally~

 

try:

(예외가 발생할 수 있는 코드) ~

 

except:

(예외가 발생하면 동작하는 코드)~

 

finally:

(예외와 무관하게 항상 수행하는 코드)~

 

그림6. try~except~finally 예시

 

4) raise

 

필요한 경우 강제로 exception을 발생시키고 싶을 때가 있음

 

raise <exception type> (예외정보)를 이용

 

그림7. raise 활용 예시

 

숫자를 받아야하는데 사람이 문자를 입력한 경우 강제로 오류를 발생시키고 종료시킴

 

 

5) assert

 

특정한 조건을 만족시키지 않으면 예외를 발생시키고 강제 종료시킴

 

assert (예외조건)

 

그림8. assert 예시

 

isinstance((변수),(타입)) 변수가 해당 타입을 만족시키면 true 아니면 false

 

10.0은 int가 아니므로 isinstance(decimal_number,int)가 False여서 assertion 에러 발생

 

 

----------------------------------------------------------------------------------------------------------------------------------------------

 

6) try~except vs. if~else~

 

try ~ except 구조를 적절하게 if ~ else ~로 치환할 수 있는 경우가 있을 것이다.

 

이 때 예외 조건이 발생하는 빈도가 적은 경우는 동일한 구조에서 try~except가 더 빠르다고 한다.

 

100만개 중 10000개가 1이고 99만개가 0인 경우, 0으로 나눌 때 예외 처리(예외 빈도가 많음)

 

 

 

 

반대로 100만개 중 10000개가 0이고 99만개가 1인 경우, 0으로 나눌 때 예외 처리(예외 빈도가 적음)

 

 

 

 

TAGS.

Comments