□ try - except 문
○ try 구문에서 지정한 코드실행중 오류가 발생되면
○ except 구문에서 지정한 코드가 실행됨
#기본형식
try:
---
except [발생_오류 [as 오류_변수]]
---
#예제1
a= 4/0 #오류출력ZeroDivisionError: division by zero
try:
4/0
except ZeroDivisionError as e:
print(e) #출력 : division by zero
#예제2
try:
a=[1.2]
print(a[3]) #해당코드를 실행하면 오류로 except구문에서의 list index out of range 출력
4/0 #해당코드를 실행하면 오류로 except구문에서의 division by zero 출력
except (ZeroDivisionError, IndexError) as e:
print(e)
○ 오류 회피하기
# 아래 코드는 없는 파일을 읽고자 할때 발생되는 에러를 예외처리하는 구문임
try:
f = open('나없는파일':'r')
except FileNotFoundError:
pass #pass를 지정하면 오류가 발생하더라도 다음 코드 진행하게됨
□ 심화예제
○ 리스트 ['파이썬','88','장고', '32', '자바', '125', '77'] 중 숫자만 필터링하는 예외처리
list_data = ['파이썬','88','장고', '32', '자바', '125', '77']
new_list = list()
for i in range(len(list_data)):
try:
int(list_data[i]) #값 형변환시 숫자 데이터는 문제가 없지만, 문자를 형변환하면 ValueError 출력됨
new_list.append(list_data[i])
except ValueError as f: #오류 발생시 발생된 값은 무시하고 바로 다음 데이터를 형변환 진행
pass
print(f'{list_data} 숫자만 고르면 {new_list}')
○ 원넓이/둘레를 위해 값 입력 중 텍스트 값 입력시 발생오류 예외처리
* instance() 함수는 변수가 특정 클래스의 인스턴스인지 확인하는 데 사용하며 Bollean 형태로 True, False 값을 반환함
number_jungsoo = input('정수 입력: ')
try:
number_jungsoo = int(number_jungsoo)
if isinstance(number_jungsoo, int): #숫자를 입력받으면 True가되어 아래코드 실행. 텍스트를 받으면 ValueError 으로 예외처리 진행
half_length = number_jungsoo
circle_round = 3.14 * 2 * half_length
circle_area = 3.14 * (half_length**2)
print(f'○원 반지름\t:\t{half_length}\n○원 둘레\t:\t{circle_round}\n○원 넓이\t:\t{circle_area}')
except ValueError:
print('정수를 입력해야지 자식아\n프로그램 폭발')