인공지능/파이썬

파이썬(Python) - 예외사항 처리

해피밀세트 2020. 3. 30. 16:23
반응형

 

 

예외사항

프로그램 실행중에 발생하는 오류

 

 

 

예외(오류) 종류

  • Synax Error : 문법오류

      print("안녕하세요)

 

  • Name Error : 참조 변수가 없을때 발생

      print(x)

 

  • Index Error : 인덱스 범위를 잘못지정 했을 발생

      lst = [1,2,3]

      lst[3]

 

  • Key Error : dictionary 형에서 없는 key 사용할 발생하는 오류

      dict = {'이름':'홍길동'}

      dict['이름']

      dict['주소']

      # 미리 확인

      dict.get("아이디")

      dict.get("비번")  # 키가 없으면 None / 아무일도 안일어남

 

 

  • Attribute Error : 모듈, 클래스에 잘못된 속성을 참조할때 오류

      import datetime

      datetime.datetime.now()

      datetime.datetime.now().month # 현재달을 리턴

      datetime.datetime.months()   # 없는 함수(속성) 호출하게 되면 오류

 

  • Value Error : 참조하는 값이 없을때 발생하는 오류

      blood = ['A','B','AB','O']
      blood.remove('O')    # 리스트 변수에 있는 3값을 제거
      blood.remove('C')

      blood.index('A')
      blood.index('B')
      blood.index('C')    # 리스트 변수에 3이라는 값이 없기 때문에 오류 발생

 

  • FileNotFound Error : 존재하지 않은 파일을 참조할때 발생하는 오류

      file = open("C:/pypy/apple.txt","r")

      # 파일이 있는지 미리 확인하기

      import os

      os.path.exists("C:/pypy/apple.txt")

 

  • Type Error : 서로 다른 자료형을 사용할경우 발생하는 오류

      x = '1','2'
      y = [2,3]
      x + y

 

  • ZeroDivisionError : 0으로 나눴을때

      def divide(x,y):

           return x/y

      divide(10,2)

      divide(10,0)

 


 

예외사항 처리

try          : 실행하는 코드 작성 (필수)

except     : 오류가 발생했을때 수행하는 코드 (필수 / 여러 사용 가능)

else         : 오류가 발생하지 않았을때  수행해야할 코드 작성 (선택 / 실행하고 나가기)

finally      : 실행되는 오류가 발생하든 무조건 수행하는 코드 작성 (선택)

raise        :  사용자가 명시한 오류

 

# 오류 발생시 except문 실행

try:

    z = divide(10,0)

    print(z)

except :

    print("오류가 발생했습니다.")

# 에러의 종류마다 다른 액션 취하기

try:

    z = divide(10,"둘")

    print(z)

except TypeError:

    print("인수값을 숫자로 입력해주세요.")

except ZeroDivisionError:

    print("0으로 나눌 수 없습니다.")

# 사용자가 지정한 오류 만들기
# 오류내용까지 같이 출력

def func(arg):

    try:

        if arg < 1 or arg > 10 :

            raise Exception("유효하지 않은 숫자입니다.:{}".format(arg))

        else :

            print("입력한 수는 {}입니다.".format(arg))

    except Exception as err :

        print("오류가 발생했습니다.{}".format(err))

 

func(2)

func(100)

# 특정 오류를 지정하지 않으면 무조건 마지막 except 실행

try:

    z = divide(10,0)

except TypeError as e:

    print("인수값을 숫자로 입력해주세요{}".format(e))

except:

    print("오류발생했습니다.")

else :

    print("결과 : {}".format(z))

finally :

    print("프로그램 종료")

# 아무것도 안쓰인 except 무조건 제일  둬야한다.

try:

    z = divide(10,'둘')

except:

    print("오류발생했습니다.")          

except TypeError as e:

    print("인수값을 숫자로 입력해주세요{}".format(e))

else :

    print("결과 : {}".format(z))

finally :

    print("프로그램 종료")

# 어떤 오류가 나던지 내가 정의한 오류 나게 하기(좋은거 아님) / 'Exception' 써야한다.

try:

    z = divide(10,'둘')

except Exception as err:

    print("오류발생했습니다.{}".format(err))    

except TypeError as e:

    print("인수값을 숫자로 입력해주세요{}".format(e))

else :

    print("결과 : {}".format(z))

finally :

    print("프로그램 종료")

 

 

반응형