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 구문 뒤에 사용해야 합니다.