반응형
예외 처리
- 프로그래밍 언어의 오류
- 구문 오류 (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
반응형