본문 바로가기
Algorithm/자료구조, 알고리즘

[코딩 + 알고리즘 완주반] 8일차. 예외 처리

by newnu 2021. 3. 22.
반응형

# 예외 종류

# 파이썬 예외처리의 이해

# 예외 종류
# 문법적으로 에러가 없지만, 코드 실행(런타임)프로세스에서 발생하는 예외 처리도 중요
# linter : 코드 스타일, 문법 체크

# 1. SyntexError :  잘못된 문법

# print('Test) # '' 닫아줘야함
# if True # ':' 없음
#   pass
# x=> y # 없는 문법 (>=)

# 2. NameError :  참조변수 없음

a=10
b=15

#print(c)

# 3. ZeroDivisionError : 0 나누기 에러
#print(10/0)

# 4. IndexError : 인덱스 범위 오버

x = [10,20,30]
print(x[0])
# print(x[3]) # 예외 발생

# 5. KeyError

dic = {'Name':'Kim','age':33,'city':'Seoul'}

#print(dic['hobby'])
print(dic.get('hobby')) # 없어도 에러 발생하지 않음

# 6. AttributeError : 모듈, 클래스에 있는 잘못된 속성 사용시에 예외

import time
print(time.time())
# print(time.month()) # 없는 모듈 사용시 에러

# 7. ValueError : 참조 값이 없을 때 발생
x = [1,5,9]
# x.remove(10) # 없는 값
# x.index(10) # 없는 값

# 8. FileNotFoundError 

#f = open('test.txt','r') # 파일 없음 예외 발생

# 9. TypeError

x=[1,2]
y=(1,2)
z='test'

# print(x+y) # 자료형 다르면 연산 불가능
# print(x+z)

print(x+list(y)) # 형변환 후 연산

# 항상 예외가 발생하지 않을 것으로 가정하고 먼저 코딩
# 그 후 런타임 예외 발생시 예외 처리 코딩 권장(EAFP 코딩 스타일)

 

# try ~ except ~ else~ finally 구문

# 예외 처리 기본
# try: 예외가 발생할 가능성이 있는 코드 실행
# except : 에러명 1
# except : 에러명 2
# else : 에러가 발생하지 않았을 경우 실행
# finally : 항상 실행

# 예제1

name = ['Kim','Lee','Park']

try : 
    z = 'Kim'
    x = name.index(z)
    print('{} Found it! in name'.format(z,x+1))
except ValueError:
    print('Not Found it!: = Occurred ValueError')
else:
    print('Ok! else!')

# 예제2

try : 
    z = 'Jim'
    x = name.index(z)
    print('{} Found it! in name'.format(z,x+1))
except : # 모든 에러 캐치
    print('Not Found it! - Occurred Error')
else:
    print('Ok! else!')

# 예제3

try : 
    z = 'Jim'
    x = name.index(z)
    print('{} Found it! in name'.format(z,x+1))
except : # 모든 에러 캐치
    print('Not Found it! - Occurred Error')
else:
    print('Ok! else!')
finally:
    print('finally Ok!')

# 예제 4
# 예외 처리는 하지 않지만, 무조건 수행되는 코딩 패턴

try:
    print('Try')
finally : 
    print('Ok Finally!!')

# 예제5
# Alias 활용
try : 
    z = 'Jim'
    x = name.index(z)
    print('{} Found it! in name'.format(z,x+1))
except ValueError as l: 
    print(l) # 'Jim' is not in list
except IndexError: 
    print('Not Found it! - Occurred  IndexError')
except Exception: 
    print('Not Found it! - Occurred Error')
else:
    print('Ok! else!')
finally:
    print('finally Ok!')

# 예제 6
# 예외 발생: raise
# raise 키워드로 예외 직접 발생

try:
    a='Kim'
    if a=='Kim':
        print('Ok 허가!')
    else:
        raise ValueError
except ValueError:
    print("문제 발생!")
except Exception as f:
    print(f)
else:
    print("Ok!")
반응형