Programming

; develop a program

Back-End/Python

[Python] 예외(Exception)와 예외 처리(Exception Handling)

Clloud_ 2022. 9. 30. 11:58
반응형

이번 포스팅에서는 파이썬의 예외(Exception)와 예외 처리(Exception Handling)에 대하여 공부를 해보고자 한다.

 


예외(Exception)와 예외 처리(Exception Handling)

예외란 함수나 메소드가 처리 도중 다음 명령문을 실행하지 못하는 상황을 말한다.

 

예외는 파이썬 문법이나 구문 규칙을 어겨서 때문에 발생하는 오류 (System Exception)와 프로그램 업무 규칙상 발생하는 오류 (Application Exception) 총 2가지로 구분된다.

 

System Exception은 예외처리를 통해 해결할 수 있지만 대부분의 경우 코드를 수정해야 한다.

Application Exception은 상황이 발생하면 명시적으로 예외를 발생시킨 뒤 예외처리를 통해 처리한다.

 

예외 처리란 발생한 예외를 해결하여 프로그램을 정상화시키는 것을 말한다.

예외가 발생하여 처리를 하기 위해서는 try ~ except을 사용하여 코드를 작성한다..

예외가 발생하지 않았을 경우 else 절을 사용하여 코드를 작성한다.

예외가 발생하든 말든 실행해야 하는 코드를 작성할 때는 finally 절을 사용한다.

 


파이썬 실행 시 발생되는 주요 예외

파이썬 표준 라이브러리에 정의된 주요 예외

예외 이름은 보통 Error로 끝난다. 

 

예제 1

순서 1. 숫자 10을 출력한다.

순서 2. 문자 a를 출력한다.

순서 3. 숫자 10을 출력한다.

print(10)
print(a)
print(20)

[실행결과]

10

NameError: name 'a' is not defined

 

예제 2

여러 가지 변수를 선언한다..

a = 20
b = 0 
c = a/b
a = 20
b = 0

[실행결과]

숫자는 0으로 나눌 수 없기 때문에 에러가 발생한다.

에러 발생 => ZeroDivisionError: division by zero

 


call stack 메커니즘

함수 간의 호출 관계에서 함수는 항상 시작한 곳으로 다시 돌아와서 종료하는 메커니즘이다.

예외상황에도 call stack 메커니즘이 적용된다.

def a():
    print('a시작')
    b()  # b()함수 호출
    print('a종료')

def b():
    print('b시작')
    c()
    print('b종료')

def c():
    print('c시작')
    print(10 / 0)	# Error 발생
    print('c종료')

a 함수를 호출했을 경우

a시작
b시작
c시작

ZeroDivisionError: division by zero

b 함수를 호출했을 경우

b시작
c시작

ZeroDivisionError: division by zero

c 함수를 호출했을 경우

c시작

ZeroDivisionError: division by zero

Error 발생 부분 삭제 후 a 함수를 호출했을 경우

a시작
b시작
c시작
c종료
b종료
a종료

 


반응형