본문 바로가기

Python 파이썬

예외처리(Exception)

728x90

예외 Exception?

  • 프로그램 동작 중 문제가 발생 되는것을 Exception(예외) 라고 함
  • 파이썬 인터프리터가 처리 중 에러가 나면 메시지를 출력하고 종료됨
  • 에러를 무시하고 진행하거나 다른 방법으로 처리되도록 핸들링 가능

 

간단하게 나누기를 동작하는 기능을 구현. 0 을 나눌 수 없음.

예외 발생 코드
n1 = int(input("수 입력 : "))
n2 = int(input("수 입력 : "))

ret = n1 / n2

print(f"{n1} / {n2} = {ret}")
 

 

실행 결과를 보자

에러

에러코드가 나오면서 에러가 나고 프로그램이 종료 되었다.

 

예외처리 기법

try:
    ...
   
except 발생 오류[메시지 변수]:
    ...

위의 형태로 예외 처리를 할 수 있다!

try          ☞ 예외가 발생할 수 있는 코드가 있는 영역(지역변수 선언 주의)

except  ☞ 발생된 예외를 처리하는 코드를 작성하는 영역

아래의 예시를 보자

n1 = int(input("수 입력 : "))
n2 = int(input("수 입력 : "))

ret = 0
try:                        # 잘 사용 안하는 예외
    ret = n1 / n2
    print("정상")
except:
    print("예외")

ret = 0
try:                        # 에러코드 포함해서 해야한다.
    ret = n1 / n2
    print("정상")
except ZeroDivisionError:
    print("예외")
   
ret = 0
try:
    ret = n1 / n2
    print("정상")
except ZeroDivisionError as msg:    
    print("예외", msg)              # 정보 포함 출력

print(f"{n1} / {n2} = {ret}")
 
실행결과
수 입력 : 3
수 입력 : 0
예외
예외
예외 division by zero
3 / 0 = 0
 

예외 처리를 통해 에러가 발생했지만 프로그램이 종료 되지않고 끝까지 실행되는것을 볼 수 있다.

예외 try ~ else

  • else는 try 영역에서 예외가 발생하지 않으면 실행되는 영역
  • 반드시 except: 뒤에 작성
n1 = int(input("수 입력 : "))
n2 = int(input("수 입력 : "))

ret = 0
try:
    ret = n1 / n2           # try 의 영역 먼저 실행
    print("정상")      
except:                     # 예외가 발생하면 except 실행, 발생하지 않으면 건너 뜀
    print("예외")
else:
    print("정상")           # 예외가 발생하지 않으면 else 실행 후

print(f"{n1} / {n2} = {ret}")   # 마지막 실행.
 

 

☜  예외 처리가 되어 예외 출력 후 프로그램 종료

 

 

 

 

☜  정상적인 나누기가 실행되어 정상 출력 후 프로그램 종료

 

 

 

예외 try ~ finally

  • finally 는 예외가 발생 여부와 관계없이 무조건 실행되는 영역
  • except: 없이 try 뒤에 작성 가능
  • except: 가 있다면 뒤에 작성
n1 = int(input("수 입력 : "))
n2 = int(input("수 입력 : "))

ret = 0
try:
    ret = n1 / n2           # try 의 영역 먼저 실행
    print("정상")      
except:                       # 예외가 발생하면 except 실행, 발생하지 않으면 건너 뜀
    print("예외")
finally:
    print("무조건")        # 예외든 아니든 무조건 실행.
                                   # finally = 자원 해제의 개념(스트림 닫기 close)
print(f"{n1} / {n2} = {ret}")   # 마지막 실행.

실행 결과
입력 : 4
입력 : 0
예외
무조건
4 / 0 = 0

 

예외 raise

  • raise 구문으로 개발자가 코드에서 직접 예외를 발생시킬 수 있다.
n1 = int(input("수 입력 : "))
n2 = int(input("수 입력 : "))

ret = 0
try:                    
    if n1 > 10:
        raise Exception("예외 메시지")  # raise -> 예외를 직접 발생 시킬 수 있다.
    ret = n1 / n2
    print("정상")
except Exception as msg:
    print("예외:", msg)

print(f"{n1} / {n2} = {ret}")
#실행결과
입력 : 11
입력 : 5
예외: 예외 메시지
11 / 5 = 0

 

n1 값이 10보다 크다면 예외 처리를 하도록 코딩했다.

 

예외 처리를 통해 내가 원하는 방향으로 프로그렘을 제어 할 수 있다!

728x90

'Python 파이썬' 카테고리의 다른 글

내장 함수(Built-In Function)_2  (0) 2023.10.25
내장 함수(Built-In Function)_1  (0) 2023.10.25
클래스의 관계 표현, object 클래스  (0) 2023.10.24
다형성(Polymorphism)  (1) 2023.10.24
상속, super  (0) 2023.10.24