728x90
반응형

예외 종류

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

- SyntaxError : 잘못된 분법
    - print('test)

- NameError :참조변수 없음
    - a = 10
    - b = 15
    - print(c)

- ZeroDivisionError : 0 나누기 에러
    - print(10/0)
    
- IndexError : 인덱스 범위 오버
    - x = [10,20,30]
    - print(x[0])
    - print(x[3]) --이게 에러 인덱스3은 없다. 2까지만 존재
 
- KeyError 
    - dic = {'name':'kim','Age':33}
    - print(dic['hobby']) -- 존재하지 않는다. hobby는
    
- AttributeError : 모듈, 클래스에 있는 잘못된 속성 사용시에 예외
    - import time
    - print(time.time())
    - print(time.month()) - 존재 x
    
- ValueError : 참조 값이 없을 때 발생
    - x[1,5,9]
    - x.remove(10)
    - x.index(10) - 참조값 없음
    
- FileNotFoundError
    - f = open('test.txt','r') # 예외 발생 # test.txt가 현재 경로에 없기 때문
    
- TypeError
    - x = [1,2]  # list
    - y = (1,2) # tuple
    - print(x+y) # list와 tuple은 합칠 수 없다.
    - print(x+list(y)) # 형 변환시 가능
    
    
- 항상 예외가 발생하지 않을 것으로 가정하고 코딩
- 그 후 런타임 예외 발생시 예외 처리 코딩 권장(EAFP 코딩 스타일)

 

예외 처리 기본

## 예외 처리 기본

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


 

 

예제1

# 예제1

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

try:
    z = 'Kim'
    x = name.index(z) # Kim찾기
    print(' {} Found it! in name'.format(z, x+1))

except ValueError:
    print('Not found it! - Occurred ValueError!')

[그림1] 예외처리 예제1

 

예제2

# 예제2 
# except

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

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

[그림2] 예외처리 예제2

 

 

예제3

# 예제3
# else


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

try:
    z = 'Kim'
    x = name.index(z) # Kim찾기
    print(' {} Found it! in name'.format(z, x+1))
except ValueError:
    print('Not found it! - Occurred ValueError!')
else:
    print('Ok! else!') # 성공 시 

[그림3] 예외처리 예제3

 

 

예제4

# 예제4
# finally : 반드시 실행

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

try:
    z = 'Kim'
    x = name.index(z) # Kim찾기
    print(' {} Found it! in name'.format(z, x+1))
except ValueError:
    print('Not found it! - Occurred ValueError!')
else:
    print('Ok! else!') # 성공 시
finally:
    print('finally ok!')
    

[그림4] 예외처리 예제4

 

 

예제5

# 예제 5
# 일반적으로 계층적 except

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

try:
    z = 'Kim'
    x = name.index(z) # Kim찾기
    print(' {} Found it! in name'.format(z, x+1))
except ValueError:
    print('Not found it! - Occurred ValueError!')
except IndexError:
    print('Not found it! - Occurred IndexError!')
except Exception:
    print('Not found it! - Occurred Error!')
else:
    print('Ok! else!') # 성공 시
finally:
    print('finally ok!')

# except 계층적으로 처리하게 만들기
# 마지막에 Exception으로 하는것이 좋다.

[그림5] 예외처리 예제5

 

예제6

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

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

[그림6] 예외처리 예제6

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기