(나도코딩의 파이썬 입문) 10장. 예외 처리(p.326~337)

2023. 3. 10. 16:00독서

반응형

안녕하세요!

<코딩 자율학습 나도코딩의 파이썬 입문> 멘토를 담당하게 된 이안입니다.

 

오늘은 10장 '예외 처리'를 이어서 학습할게요!

 

오늘 공부할 내용은 다음과 같습니다.

 

🧐 공부할 내용(p.326~337)

  • 예외 처리하기
  • 오류 발생시키기

 

1.  예외 처리하기


예외처리는 오류 상황에 대처하는 것입니다.

(실행이 되지 않는 것에 대한 오류를 처리하는 것이 아닌, 실행 후 발생하는 오류를 처리하는 것입니다.)

 

 

예외 처리는 정말 중요합니다.

왜냐하면 프로그램에서는 정말 다양한 상황이 연출되기 때문이죠.

 

p.328를 볼까요?

 

print("나누기 전용 계산기입니다.")
num1 = int(input("첫 번째 숫자를 입력하세요 : "))
num2 = int(input("두 번째 숫자를 입력하세요 : "))
print(f"{num1} / {num2} = {int(num1/num2)}")

 

이 코드는 언뜻 보면 문제가 없는 코드처럼 보입니다.

 

하지만 생각보다 많은 문제를 가지고 있죠.

 

1. p.328에 있는 것처럼 숫자 외에 다른 문자가 들어갔을 때 에러를 발생시키고 프로그램을 종료해 버립니다.

2. p.331에 있는 것처럼 num2에 숫자 0이 들어가면 ZeroDivisionError가 발생합니다.

 

 

그렇기 때문에 이런 에러들을 반드시 처리해야 합니다.

이 에러 처리를 위해서 존재하는 것이 try-except 문입니다.

 

print("나누기 전용 계산기입니다.")
try:
    num1 = int(input("첫 번째 숫자를 입력하세요 : "))
    num2 = int(input("두 번째 숫자를 입력하세요 : "))
    print(f"{num1} / {num2} = {int(num1/num2)}")
except ValueError:
    print("에러! 잘못된 값을 입력하였습니다.")
except ZeroDivisionError as err:
    print("에러!" + err)

 

 

이런 상황이라면 어떤 에러가 무엇 때문에 발생했는지 한눈에 알아볼 수 있죠!

 

 

 

오류 메시지를 예외 처리로 출력하는: as

 

as를 사용하면 에러 문장을 변수로 받아옵니다.

 

그렇기 때문에 위 코드에서 ZeroDivisionError가 발생했을 때, err에 division by zero라는 문장이 할당되는 것이죠.

 

이후, print문을 사용해서 에러를 간단하게 출력하거나, 저처럼 다른 문자열과 합쳐서 출력할 수 있습니다.

 

 

2.  오류 발생시키기


지금까지 오류를 처리하는 과정을 했습니다.

 

그런데 오류를 발생시킨다니, 무슨 말일까요?

 

print("한 자리 숫자 나누기 전용 계산기입니다.")
try:
    num1 = int(input("첫 번째 숫자를 입력하세요 : "))
    num2 = int(input("두 번째 숫자를 입력하세요 : "))
    if num1 >= 10 or num2 >= 10:
        raise ValueError
    print(f"{num1} / {num2} = {int(num1/num2)}")
except ValueError:
    print("에러! 잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요.")
except ZeroDivisionError as err:
    print("에러! 0으로는 나눌 수 없습니다.")

 

이렇게 내가 임의로 지정한 숫자 이상의 숫자가 입력되면 ValueError를 발생시키는 것이죠.

 

 

🥕멘토 TIP

에러를 발생하다 보면 이런 생각이 드실 수 있어요.

 

'그냥 print 하면 되는 거 아닌가?'

 

print만 하면 문제가 있습니다.

 

1. print이후 프로그램이 계속 실행됩니다.

2. 서버의 경우 HTTP 응답을 줘야 하는데 응답을 발생시키기 힘듭니다.

3. 프로그램 외부에 기록이 되어야 하는데 단순 print로는 기록하기 어렵습니다. (file을 사용해야 함.)

 

 

이런 이유로 에러를 발생시키고 처리하는 것이 훨씬 바람직합니다.

 

 

 


이번 시간에는 오류 처리와 발생에 대해 공부했습니다.

 

공부하시다 궁금하신 점이 있다면 댓글 남겨주세요~

 

 

✅ 정리

* 예외 처리하기

    * try - except

* 오류 발생시키기

    * raise

 

반응형