Python - 예외 처리하기 (try/except구문 사용법, 오류 확인하기, 강제 오류 발생시키기(raise))

반응형

예외 처리

  • 프로그래밍 언어의 오류
  • 구문 오류 (Syntax Error)
    • 프로그램 싱행 전에 발생하는 오류
  • 논리적 오류(Logical Error) 혹은 런타임 오류(Runtime Error)
    • 프로그램 실행 중에 발생하는 오류
    • 문법적으로 틀린 것이 없으므로 즉시 인식되지 않지만 의도치 않은 결과의 가능성 존재

예외 제어 (try, except 구문)

  • 예외가 발생 할 수 있는 상황을 예상하여 예외 제어
  • 예외가 발생할 수 있는 코드를 try에 넣어서 활용(가독성, 유지보수 향상)
    • 예) 자료형 에러 관련, DB연동 에러 관련 등등
  • try : (예외 발생 가능한) 일반적인 수행문들
  • except : 예외가 발생하였을 때 수행문들, 예외를 그냥 넘어가고 싶을때는 pass 키워드 사용
    • else를 붙여 예외가 발생하지 않았을 때 실행 할 코드를 지정 할 수 있음
  • finally : 예외 발생 유무 상관 없이 실행되는 코드 작성

try, except 규칙

  • try는 단독 사용 불가
  • else는 반드시 except 뒤에 와야함
# 정수형 연산, 정상 연산
try :
    y = 10 / 3
    print("tyr :", y)
except :
    print("except : Error")
else :
    print("else : No Error!")
finally :
    print("finally : End")
>>> try : 3.33333...
>>> else : No Error!
>>> finally : End

# 문자형 데이터로 연산 시도, 에러 출력
try :
    y = 10 / "Hello!"
    print("tyr :", y)
except :
    print("except : Error")
else :
    print("else : No Error!")
finally :
    print("finally : End")
>>> except : Error
>>> finally : End

예외 객체

  • 예외가 발생하면 예외가 관련된 정보 생성
  • 예외 객체 활용 가능

예외 구분

  • 예외 객체를 활용해 조건문처럼 예외 종류에 따른 코딩 가능
  • 예외 객체는 임의로 지정하는 것이 아닌 예외 발생시 발생된 예외의 이름을 사용
    • 예1) except ValueError: print(정수를 입력해주세요.)
    • 예2) except IndexError: print(범위를 벗어났습니다.)
  • 예외 객체를 'as'로 축약하고 객체의 정보를 확인 가능
    • 모든 예외 객체를 표현하려면 예외 객체를 Exception으로 지정 
    • 예1) except Exception as e : print(e)
    • 예2) except TypeError as te : print("Error : ", te)
# try/except 구문 사용 없이 에러 출력
# 데이터 타입을 맞추지 않고 연산, 예외 객체는 'TypeError'
y = 10 / "Hello!"
>>> TypeError: unsupported operand type(s) for /: 'int' and 'str'


# 예외 객체를 활용하여 에러 출력
try :
    y = 10 / "Hello!"
    print("tyr :", y)
# 예외 객체 ZeroDivisionError
except ZeroDivisionError as e: 
    print("ZeroDivisionErro :", e)
# 예외 객체 TypeError
except TypeError : 
    print("TypeError")
>>> except : TypeError


# 모든 예외 객체 출력
try :
    y = 10 / "Hello!"
    print("tyr :", y)
# 어떤 예외 객체가 올지 모를 경우 사용하면 유용
except Exception as e:
    print("Error :", e)
>>> Error : unsupported operand type(s) for /: 'int' and 'str'

강제로 예외 발생시키기 (raise)

  • raise 예외 종류 (메시지)
  • 사용자 정의 클래스를 만들었을 경우 (연산자 오버로딩 등)
  • 아직 구현이 덜 된 코드일 경우
  • 그 외 문법적으로 정상적인 코드지만 예외 처리가 필요한 경우
# 문법적, 논리적으로 맞음에도 에러 출력
a = 1
if a > 0 :
    raise Exception('message')
>>> Exception: message

 

반응형