Bunny Code

[Python] - 20) 예외 처리(조건문 활용, try except 구문) 본문

Python Basic

[Python] - 20) 예외 처리(조건문 활용, try except 구문)

버즈밴드 2020. 8. 25. 17:51

여태까지 파이썬을 공부하면서 여러 오류들을 보셨을 겁니다.

오류는 크게 '구문 오류''예외 오류(런타임 오류)' 로 나뉘는데 두 가지가 무엇인지 먼저 알아볼게요.

1) 구문 오류 = 프로그램 자체가 실행되지 않는 오류

예시 : 

print("구문 오류")

print("프로그램이 실행 자체가 안되는 구만"

위와 같이 일부러 두 번째 print 구문의 괄호를 작성하지 않으면 아래와 같은 오류가 발생합니다.

오류 화면

저기 보이는 SyntaxError 라고 불리는 것은 '구문 오류'를 의미합니다. 

첫 번째 작성된 올바른 print 구문도 실행되지 않은 것을 확인할 수 있습니다. 

그렇다면 '예외 오류' 는 어떨까요?

 

2) 예외 오류(런타임 오류) = 프로그램이 일단 실행된 다음, 실행 중에 발생하는 오류

예시 : 

print("프로그래밍 일단 시작되었구나")

print(x)

위와 같이 일부러 정의되지 않는 x 를 print 하는 코드를 작성하면 아래와 같은 오류가 발생합니다.

오류 화면

첫 번째 print 구문은 실행이 되고 두 번째 구문에서 오류가 생긴 것을 확인할 수 있습니다. 

이렇게 프로그램이 실행은 되지만 실행 된 후의 오류를 예외 혹은 런타임 오류라고 합니다. 

이렇게 두 가지 오류 모두 코드 작성을 수정하면 바로 잡을 수 있지만, 경우에 따라 프로그램이 복잡해지면 예외를 처리하면 편한 경우가 생깁니다. (예외가 발생하지만 예외를 처리함으로서 정상적인 코드가 실행되도록 함, 말이 복잡하지만 예시를 통해 보면 이해가 수월해요!)

 

 

이제부터 예외 처리 방법에 대해 다룰건데

첫 번째로 예외 처리 방법으로 조건문을 한번 사용해봅시다!

바로 예시 볼게요! (가속도와 시간이 주어졌을 때, 속도와 거리를 구하는 코드)

input_1,input_2 = int(input("가속도 입력 >")),int(input("시간 입력 >"))
print("등가속도 운동할 때")
print("가속도 :", input_1)
print("속도 :", input_1 * input_2)
print("거리 :", input_1*input_2**2/2)

코드 입력 화면

정상적으로 숫자를 입력하면 다음과 같이 코드가 잘 실행됩니다. 

코드 실행 화면

하지만, 정수를 입력한 것이 아니라 문자열을 입력했을때는???

오류 화면

위와 같은 오류가 발생하게 됩니다. 

 

이를 '정수로 입력하지 않았을 때'를 조건으로 구분해서, 해당 상황일 때 다른 처리를 하도록 해 예외를 처리해보겠습니다!

input_1,input_2 = input("가속도 입력 >"),input("시간 입력 >")
if input_1.isdigit() and input_2.isdigit() :
    num_1,num_2 = int(input_1),int(input_2)
    print("등가속도 운동할 때")
    print("가속도 :", num_1)
    print("속도 :", num_1 * num_2)
    print("거리 :", num_1 * num_2 ** 2 / 2)

else :
    print("정수만 가능해요. 다시 입력해주세요")

코드 입력 화면
정수가 아닌 것을 입력했을 때 예외 처리된 화면

위의 실행 화면을 보면 정수가 아닌 것을 입력했을 때 예외가 처리된 것을 확인할 수 있습니다.

 

 

두 번째로 try except 구문을 사용하여 예외 처리하는 방법을 알아보겠습니다. 

try :

    <예외가 발생할 가능성이 있는 코드>

except :

    <예외가 발생했을 때 실행할 코드>

예시 : 

코드 입력 화면
코드 실행 화면

try 안의 구문을 실행해보고 실행 되지 않는 경우 except 구문을 실행하라!

이런 의미로 받아들이니 저는 이해가 수월했어요!!

 

try except 구문을 잘 알고 있다면 이는 코드의 활용 방법에도 다양하게 적용될 수 있습니다!

예를 들어, 주어진 리스트에서 숫자로 변환되는 것들로만 이루어진 새로운 리스트를 만들어보겠습니다!

list_1 = ["123", "313", "515", "918", "나는 문자열이지롱", "717"]
list_2 = []
    for item in list_1 :
        try :
            float(item)
            list_2.append(item)
        except :
            pass
print("{} 내부에 있는 숫자는".format(list_1))

print("{}입니다.".format(list_2)

코드 입력 화면
코드 출력 화면

 

 

'Hello Coding 파이썬' 을 참고하여 작성하였음.

Comments