# chapter07-01
# 파이썬예외처리의 이해
# 예외종류
# syntax, type, name, index, value, key..error
# 문법적으로는 틀리지 않았지만, 코드실행 프로세스(단계) 발생하는 예외도 중요
# 1. 예외는 반드시 처리
# 2. 로그는 반드시 남긴다.
# 3. 예외는 던져진다.
# 4. 예외 무시.
# syntaxError / 문법 오류.
# print('error) / print('error'))
# nameError / 참조 없음
# a=10
# b=15
# pring(c)
# ZeroDivisionError
# print(100/0)
#IndexError
x=[50,70,90]
print(x[1])
# print(x[4])
# KeyError
dic={'name' :'Lee' , 'age' : 41, 'city':'busan'}
# print(dic['hobby'])
# 예외가 없는 것을 가정하고 프로그램을 작성 > 런타임 예외 발생 시 예외 처리 권장(EAFP)
# AttributeError : 모듈, 클래스에 있는 잘못된 속성 사용 예외
import time
# print(time.time2()) time2는 없다
# ValueError
x = [10,50,90]
x.remove(50)
print(x)
# x.remove(200)
# FileNotFoundError
# f = open('text.txt') 파일 없음 에러.
# TypeError : 자료형에 맞지 않는 연산 수행할 경우
x = [1,2]
y = (1,2)
z = 'test'
# print(x+y)
print(x+list(y))
# 예외처리 기본
# try : 에러가 발생할 가능성이 있는 코드 실행
# except 에러명1 : 여러개 가능
# except 에러명2 :
# else : try 블록의 에러가 없을 경우 실행
# finally : 항상 실행.
name = ['kim', 'lee', 'park']
# 예제1
try :
z = 'kim' #'Cho' 예외처리가 된다.
x = name.index(z)
print('{} Found it {} in name'.format(z,x+1))
except ValueError :
print('not fount it = occurred ValueError!')
else :
print('ok! else.')
print()
# 예제2
try :
z = 'kim' #'Cho' 예외처리가 된다.
x = name.index(z)
print('{} Found it {} in name'.format(z,x+1))
except : # except Exception : 와 같다.
print('not fount it = occurred')
else :
print('ok! else.')
print()
# 예제3
try :
z = 'cho' #'Cho' 예외처리가 된다.
x = name.index(z)
print('{} Found it {} in name'.format(z,x+1))
except Exception as e :
print(e) #'cho' is not in list
print('not fount it = occurred')
else :
print('ok! else.')
finally :
print('ok! finally!')
print()
# 예제4
# 에외 발생 : raise
# raise 키워드로 예외 직접 발생
try :
a = 'park'
if a == 'kim' :
print('Ok! pass')
else :
raise ValueError #강제로 발생시키는에러.
except ValueError :
print('Occurred! Exception!')
else :
print('OK! else.')