Python

1-7-1. 오류 처리 Python 예외

사람들은 예상 못한 상황에서
임기응변이라는 여러가지 선택지가 있지만
프로그램 입장에서 코드는

명령을 받고 그 명령대로’만’ 실행하는 것 입니다.
명령이 잘못 되었으면
“약속한 것과 다르잖아!”
라는 의미에서 에러(오류)를 일으킵니다.

이를 흔히 코드가
“다운된다.” 혹은 “코드가 죽는다.”

표현을 자주 사용합니다.


프로그램 오류 종류

  • 프로그램 실행 전에 발생하는 오류
  • 프로그램 실행 중에 발생하는 오류

실행 [전]

구문오류 라고 부릅니다.
대부분이 괄호 개수, 들여쓰기 문제 등으로
코드에 문제가 있을 경우 주로 나타납니다.

# 오류 확인 - 문자열을 닫지 않음
print("예외 발생하는 코드입니다.)

SyntaxError: EOL while scanning string literal

실행 [중]

예외가 발생하는 코드

print("# 프로그램이 시작되었습니다!")
# 예외 발생 코드
list_a[1]

위의 코드는 list_a가 정의 되지 않았습니다.
실행 중에 발생하는 오류를 예외 혹은 런타임 오류라고 부릅니다.

예외 해결

print("# 프로그램이 시작되었습니다!")
# 리스트 정의
list_a = [1, 2, 3, 4]
list_a[1]

기본 예외 처리

예외를 해결하는 모든 것을

예외 처리(exception handling)라고 부릅니다.

  • 조건문을 사용하는 방법
  • try 구문을 사용하는 방법

이와 같은 예외 처리 방법을 기본 예외 처리라고 부릅니다.

예외가 생길 수 있는 코드

number_input_1 = int(input("정수 입력> "))

# 출력
print("원의 반지름: ", number_input_1)
print("원의 둘레: ", 2 * 3.14 * number_input_1)
print("원의 넓이: ", 3.14 * number_input_1 ** 2)

조건문으로 예외 처리하기

문자열의 isdigit()함수를 사용하면
숫자로 구성된 글자인지 확인이 가능합니다.
(1-3-3의 문자열 구성에서 확인이 가능합니다.)

# 숫자 입력받기
user_input_1 = input("정수 입력>")
# 숫자로 구성된 경우
if user_input_1.isdigit():
	# 숫자로 변환
    number_input = int(user_input_1)
    # 출력
    print("원의 반지름:", number_input)
    print("원의 둘레:", 2 * 3.14 * number_input)
    print("원의 넓이:", 3.14 * number_input ** 2)
else:
	print("정수를 입력하지 않았습니다")
오류

try except 구문

모든 내용을 조건문으로 처리하는 것은 어렵습니다.

요즘 프로그래밍 언어에서는 예외를 처리할 수 있는 구문을 제공합니다.

형태

try:
	예외가 발생할 가능성이 있는 코드
except:
	예외가 발생했을 때 실행할 코드

어떤 상황에 예외가 발생하는지 완벽하게 이해하고 있지 않더라도

프로그램이 강제로 죽어 버리는 상황을 막을 수 있습니다.

#예제 코드
try:
    # 숫자로 변환
    number_input_1 = int(input("정수 입력> "))
    # 출력
    print("원의 반지름:", number_input_1)
    print("원의 둘레:", 2 * 3.14 * number_input_1)
    print("원의 넓이:", 3.14 * number_input_1 ** 2)
except:
	#예외 처리
    print("어떤 것이 잘못되었습니다.")

예외를 일단 처리해야하며

해당 코드가 내용중 굳이 실행을 하지 않아도 괜찮은 경우라면

try except 구문과 pass를 함께 사용

try:
    예외가 발생할 가능성이 있는 코드
except:
    pass

숫자로 변환되는 것들만 리스트에 넣기

list_input_1 = ["11","22","33","커피","44"]
# 반복을 적용
list_number = []
for item in list_input_1:
    #숫자로 변환후 리스트에 추가
    try:
        float(item) #예외 발생시 진행 안됨
        list_number.append(item) #예외로 넘어가지 않으면 추가
    except:
        pass
print("{} 내부에 있는 숫자는".format(list_input_1))
print("{}입니다.".format(list_number))

try except else 구문

try:
    예외가 발생할 가능성이 있는 코드
except:
    예외가 발생했을 때 실행할 코드
else:
    예외가 발생하지 않았을 때 실행할 코드

예외가 발생할 가능성이 잇는 코드만 try 구문에 넣고 나머지를 모드 else구문으로 빼는 경우가 많습니다.

# except else 구문
try:
    #숫자로 반환
    number_input = int(input("정수 입력> "))
except:
    print("정수를 입력하지 않았습니다")
else:
    print("원의 반지름:", number_input)
    print("원의 둘레:", 2 * 3.14 * number_input)
    print("원의 넓이:", 3.14 * number_input ** 2)

finally 구문

finally 구문은 예외의 발생 여부에 상관없이 무조건 실행되는 코드 입니다.

try:
    예외가 발생할 가능성이 있는 코드
except:
    예외가 발생했을 때 실행할 코드
else:
    예외가 발생하지 않았을 때 실행할 코드
finally:
    무조건 실행할 코드    

코드 활용 예제

# except else 구문
try:
    #숫자로 반환
    number_input = int(input("정수 입력> "))
except:
    print("정수를 입력하지 않았습니다")
else:
    print("원의 반지름:", number_input)
    print("원의 둘레:", 2 * 3.14 * number_input)
    print("원의 넓이:", 3.14 * number_input ** 2)
finally:
    print("프로그램을 종료하겠습니다.")

try는 단독으로 사용할 수 없습니다.
반드시 except 구문 또는 finally 구문과 함께 사용해야 합니다.
else 구문은 반드시 except 구문 뒤에 사용해야 합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다