코드잇 스프린트/파이썬

예외처리: try, except, 그리고 raise Exception

JOHAWK 2024. 7. 19. 18:15

파이썬 기본 문법으로 제공된  try와 except에 대해 알아보자.

예외처리: try, except, 그리고 raise Exception

목차

1. 예외처리란 무엇인가?

2. try와 except

3. raise Exception

 

1. 예외처리란 무엇인가?

나같은 초보자들이 파이썬을 사용하면서 답답함을 느끼는 경우 중 하나는 바로 열심히 코딩한 파이썬 스크립트가 작동하다가 에러를 만나 중간에 멈춰버리는 경우다.

어디서 에러가 발생하는 지 알아보는 것도 중요하지만 에러가 발생한 부분 외에 잘 작동된 결과물을 보는 것도 우리에겐 소중하다.

그래서 에러를 만나도 파이썬 스크립트가 중단되는 것을 방지하기 위해 예외처리를 진행한다.

 


2. try와 except

예외처리를 하는 대표적인 방법으로 try와 except가 있다.

아래와 같이 try에 실행하고자하는 코드를 넣고, except에 예외가 발생했을 때 처리하는 코드를 넣으면 된다.

예시는 주어진 리스트에서 10을 각 요소로 나눴을 때 몫을 구하는 반복문에 try, except 구문을 넣었다.

data = [1, 6, 0, 7, 5, "가"]
for i in data:
    try:
        answer = 10 // i  # 10 나누기 i의 몫 구하기
        print(answer)
    except:
        print("에러 발생!")

 

그러면 아래와 같은 결과가 나타난다.  

10
1
에러 발생!
1
2
에러 발생!

 

 

try와 except 없이 for 반복문을 사용했다면 세번째에서 에러메시지와 함께 반복문 전체가 멈춰버리지만 try와 except 구문을 사용한 덕분에 에러가 발생한 부분은 "에러 발생!"이라는 문구를 프린트하고 다음 반복문으로 넘어갔다.

 

에러가 발생해도 스크립트가 끝까지 진행되는 건 알았는데 에러가 왜 발생했는지 알고 싶다면 아래처럼 except 부분을 바꾸면 된다.

data = [1, 6, 0, 7, 5, "가"]
for i in data:
    try:
        answer = 10 // i  # 10 나누기 i의 몫 구하기
        print(answer)
    except Exception as e:  # as 뒤에 변수(여기서는 e)를 지정하면 예외사항이 e라는 변수로 저장
        print("에러 발생!", e)

 

except 구문에 Exception as e를 넣으면 모든 예외를 e라는 변수에 저장하게 되고, print문에서 "에러 발생!"과 함께 예외를 표시할 수 있다.

10
1
에러 발생! integer division or modulo by zero
1
2
에러 발생! unsupported operand type(s) for //: 'int' and 'str'




3. raise Exception

한편, 시스템 상 나타는 에러 외에 우리가 직접 예외를 정의할 수 있다. 바로 rasie Exception을 활용하는 것이다. 10보다 큰 수를 예외로 설정하고 싶으면 아래와 같이 적용할 수 있다.

data = [1, 6, 0, 7, 5, 11, "가"]
for i in data:
    try:
        answer = 10 // i  # 10 나누기 i의 몫 구하기
        if answer == 0:
            raise Exception("주어진 값이 10보다 큽니다!")
        print(answer)
         
    except Exception as e:
        print("에러 발생!", e)

 

raise Exception 함수를 통해 answer이 0과 같으면 "주어진 값이 10보다 큽니다!"라는 예외 사항을 새로 정의했으며 그 아래에 있는 except 구문을 따라 "에러 발생! 주어진 값이 10보다 큽니다!"라는 결과를 출력한다.

10
1
에러 발생! integer division or modulo by zero
1
2
에러 발생! 주어진 값이 10보다 큽니다!
에러 발생! unsupported operand type(s) for //: 'int' and 'str'

 


참고

pass, continue, 그리고 break (tistory.com)

 

pass, continue, 그리고 break

파이썬에서 제공되는 기본 문법 중 반복문에서 사용하는 pass와 continue, 그리고 break에 대해 알아보자. pass, continue, 그리고 break 목차 1. pass 2. continue 3. break 1. passpass는 '지금 하고 있던 명령을 계

johawk.tistory.com

 

'코드잇 스프린트 > 파이썬' 카테고리의 다른 글

시간 관련 모듈(datetime, time)  (0) 2024.07.30
클래스 변수와 클래스 메소드  (0) 2024.07.30
정적 메소드  (0) 2024.07.25
클래스와 인스턴스  (0) 2024.07.25
pass, continue, 그리고 break  (0) 2024.07.19