시작은 미약하였으나 , 그 끝은 창대하리라

06강 ) 예외 처리 본문

프로그래밍/파이썬

06강 ) 예외 처리

애플파ol 2022. 1. 25. 18:19

목차:

        06_1) 구문 오류와 예외

        06_2) 예외 고급

 

 

06_1) 구문 오류와 예외

  - 오류의 종류

  - 기본 예외 처리

  - try except 구문, try except else 구문

  - finally 구문

 

 

  ▶ 오류의 종류

        - 구문 오류 : 프로그램 실행 전에 발생하는 오류

                sol ) 코드를 제대로 수정해야 함

        - 예외(=런타임오류) : 프로그램 실행 중에 발생하는 오류

                sol ) 코드를 제대로 작성하면 됨

   기본 예외 처리

          -> 예외를 해결 하는 모든 것 : 예외 처리

              sol) 조건문을 사용하는 방법     

              sol) try 구문을 사용하는 방법

#------조건문으로 예외 처리하기--------#


a=input('정수를 입력해주세요: ')

if a.isdigit():       # 입력이 숫자로만 구성되있는지 확인 하는 함수 .isdigit()
    b=int(a)          # 문자열로 할당 받을것을 정수형으로 변환후 할당함.
    print("입력받은숫자는",a,"입니다.")
    
else:                  # 정수로 입력받지 않았을 경우 실행함
    print("정수를 입력하지 않았습니다.")

 

   try except 구문, try except else 구문

 

       ●  try except 구문

 

        syntax)   try:                                               

                          예외가 발생할 가능성이 있는 코드 

                     except:                                        

                           예외가 발생했을 때 실행할 코드   

#---------try except구문으로 예외를 처리하기----------#

try:
    a=int(input('정수를 입력해주세요: '))

    print("입력받은숫자는",a,"입니다.")
        
except:                  # 정수로 입력받지 않았을 경우 실행함
    print("정수를 입력하지 않았습니다.")

        syntax)   try:                                              

                          예외가 발생할 가능성이 있는 코드  

                     except:                                         

                           pass                                           

 

        -> 예외가 발생하면 처리를 해야하지만, 해당 코드가 중요한 부분이 아니라면 일단 프로그램이 강제 종료되는

           것부터 막자는 목적으로 except구문에 pass를 사용함.

list_1=["40","124","연습장","246","89"]

list_2=[]
for i in list_1:
    try: 
        float(i)        # 숫자로 변환할수 없는 문자열이면,  예외가 발생하여 line7을 실행하지 않는다.
        list_2.append(i)  
    except:
        pass
  
print(list_1)  
['40', '124', '연습장', '246', '89']
print(list_2)
['40', '124', '246', '89']

        ● try except else 구문

                 -> try except 구문 뒤에 else구문을 붙여서 '예외가 발생하지 않았을 때 실행할 코드'를 지정함

 

             syntax) try:                                                  

                           예외가 발생할 가능성이 있는 코드      

                       except:                                             

                           예외가 발생했을 때 실행할 코드         

                       else:                                                

                          예외가 발생하지 않았을 때 실행할 코드 

try:                                        
    a=int(input('정수를 입력해주세요: '))    #예외가 발생할 가능성이 있는 코드         
except:                                     
    print("정수를 입력하지 않았습니다.")      # 정수로 입력받지 않았을 경우 실행함
else:                                       
    print("입력받은숫자는",a,"입니다.")       # 정수로 입력 받았을 경우 실행함

 

 

  ▶ finally 구문

            -> 예외가 발생하든 발생하지 않든 무조건 실행할 때 사용하는 코드

 

             syntax) try:                                                   

                           예외가 발생할 가능성이 있는 코드       

                       except:                                              

                           예외가 발생했을 때 실행할 코드          

                       else:                                                 

                          예외가 발생하지 않았을 때 실행할 코드 

                        finally:                                             

                           무조건 실행할 코드                          

 

try:                                        
    a=int(input('정수를 입력해주세요: '))    #예외가 발생할 가능성이 있는 코드         
except:                                     
    print("정수를 입력하지 않았습니다.")      # 정수로 입력받지 않았을 경우 실행함
else:                                       
    print("입력받은숫자는",a,"입니다.")       # 정수로 입력 받았을 경우 실행함
finally:
    print("프로그램이 끝이 났습니다")         # 무엇을 입력하던간에 무조건 실행됨

           ● 가능한 구문조합

                     -  try + except 

                     -  try + except + else

                     -  try + except + finally

                     -  try + except + else +finally

                     -  try + finally

 

  

06_2) 예외 고급

  - 예외 객체

  - 예외 구분하기

  - 모든 예외 잡기

  - raise 구문

 

   예외 객체

        ● 예외 객체: 프로그래밍 언어에서 발생한 예외정보를 저장하는 곳

           ->Exception 사용시 예외의 종류를 알아서 출력해줌

       

try:
   예외가 발생할 가능성이 있는 구문
except 예외의 종류 as 예외 객체를 활용할 변수 이름:
   예외가 발생했을때 실행할 구문

 

   예외 구분하기

      ● 파이썬에서 except구문 뒤에 에외의 종류를 입력해서 예외를 구분할 수 있다.

try:
   예외가 발생할 가능성이 있는 구문
except 예외의 종류A:
   예외A가 발생했을때 실행할 구문
except 예외의 종류B:
   예외B가 발생했을때 실행할 구문
except 예외의 종류C:
   예외C가 발생했을때 실행할 구문
list_1=[52,273,32,72,100]

try:
   number_input=int(input("정수를 입력하세요>"))
   print("{}번째 요소:{}".format(number_input,list_1[number_input]))

except ValueError:
   print("정수를 입력해주세요")

except IndexError:
   print("리스트의 인덱스를 벗어났어요")
   
   
정수를 입력하세요> yes
정수를 입력해주세요

정수를 입력하세요>100
리스트의 인덱스를 벗어났어요

 모든 예외 잡기

    ● 만약 예외 조건에 일치하는 것이 없다면 당연히 예외가 발생하여 프로그램이 강제 종료가 된다.

        ->그것을 방지하기 위해 Exception을 넣어서 프로그램이 죽지 않도록 만들어주는 것이 좋음.

list_1=[52,273,32,72,100]

try:
   number_input=int(input("정수를 입력하세요>"))
   print("{}번째 요소:{}".format(number_input,list_1[number_input]))

except ValueError as exception:
   print("정수를 입력해주세요")
   print(type(exception),exception)

except IndexError as exception:
   print("리스트의 입력을 벗어났어요")
   print(type(exception),exception)


except Exception as exception:   # ValueError , IndexError 가 아닌 예외가 발생했을 때 실행됨
   print("미리 파악하지 못한 예외가 발생했습니다.")
   print(type(exception),exception)

   raise 구문

     ● raise 구문을 통해 예외를 강제로 발생시키는 기능.

                 syntax) rasie 예외객체                

               ->사용이유: 구현하지 않은 부분에 대해 확실하게 표시하기 위해서

number=input("정수입력:")
number= int (number)

if number >0:
   raise NotImplementedError

else:
   raise NotImplementedError

 

Comments