TIL - 03/30 - Python

Sung Jun Jin·2020년 3월 30일
0

TIL

목록 보기
8/25

Exceptions

Exception(예외) : 의도하지 않은 에러

my_list = [1,2,3]

print(my_list[4]) # 출력 : IndexError: list index out of range

list의 총 길이는 3이지만 4번째 인덱스의 값을 출력하려고 하니 exception이 발생한다.

파이썬에서 exception이 발생하면 곧바로 프로그램이 종료된다. 하지만 exception이 발생해도 남은 프로세스를 진행 한 후 발생한 exception을 따로 처리하는 방법이 있다. 이를 exception handling이라고 한다.

try :
    # 문장 1
    # 문장 2

except Exception :
    
    # Exception이 발생할 경우 처리하는 코드
finally : 

    # Exception 여부와 상관 없이 항상 마지막에 실행되는 코드     

맨 위에서 발생한 my_list배열의 인덱스 event에 try except문을 적용하여 exception handling을 해보자

   def return_elem_or_minus_one(index) :
   
       short_list=[1,2,3,4]
       
       try :
           elem = short_list[index]
           print("exception이 발생되면 실행되지 않는 문장")
           
       except IndexError :          
          print("IndexError exception이 발생되면 실행되는 문장")
          elem = -1
      finally :
          print("exception 발생 여부와 상관없이 실행되는 문장")
      
      return elem
  
  answer = return_elem_or_minus_one(4)
  print(answer) 

'''
출력 
  
exception이 발생되면 실행되는 문장
exception 발생 여부와 상관없이 실행되는 문장
-1
'''

하나하나씩 뜯어보자.

try 블록을 수행 중 오류가 발생하면 exception 블록이 수행된다. 하지만 try 블록에서 오류가 발생하지 않는다면 exception 블록은 수행되지 않는다.

try :
    elem = short_list[index]
    pritn("exception이 발생되면 실행되지 않는 문장")

short_list의 범위를 벗어난 연산을 수행할 경우 IndexError가 발생한다. 따라서 미리 정의한 exception IndexError 블록은 IndexError exception이 발생할 경우 실행된다.

except IndexError :
    print("IndexError exception이 발생하면 실행되는 문장")
    elem = -1

하나의 exception만이 아닌 여러개의 특정한 exception을 처리하기 위해 다음 구문을 사용할 수 있다.

except ZeroDivisionError :
	print("0으로 나눌 수 없습니다.")
except IndexError : 
	print("인덱싱 할 수 없습니다.")

IndexError 뿐만이 아닌 한번에 다양한 exception을 잡고(catch) 싶다면 except Exception을 사용하면 된다.

except Exception :
    print("모든 exception이 발생하면 실행되는 문장")
    elem - 1

또한 Exception을 잡을 때 "as"문을 써서 해당 exception의 객체를 받아와 정보를 더 얻을 수 있다. exception이 발생한 객체를 e라고 정의하고 e를 출력해봤을때 list index out of range라는 exception 정보를 출력해봤다.

except Exception as e :
	
    print(f"발생한 exception: {e}")
    elem = -1
    
'''
출력
발생한 exception: list index out of range
'''

try문에서 exception이 발생하지 않았을 때, else문을 사용할 수 있다.

    try :    	
        elem = short_list[index]
        print("exception이 발생되면 실행되지 않는 문장")
        
    except Exception as e :
        
        print(f"발생한 exception: {e}")
        elem = -1
    else :
        print("아무 exception도 없었습니다.")

마지막으로 finally는 exception 발생과 상관없이 무조건 실행된다. 주로 사용한 리소스를 close할때 사용된다.

finally :
    print("exception 발생 여부와 상관없이 실행되는 문장")
profile
주니어 개발쟈🤦‍♂️

0개의 댓글