[ python] 예외(Exception)

ljkgb·2021년 1월 30일
0

Python

목록 보기
11/20
post-thumbnail

1. 예외

1) 예외는 반드시 처리해야 함
2) 로그는 반드시 남긴다
3) 예외는 던져진다
4) 예외 무시 - 좋지 않음!

2. 예외의 종류

  • SyntaxError, TypeError, NameError, IndexError, ValueError, KeyError
  • 문법적으로는 예외가 없지만, 코드 실행 프로세스(단계)에서 발생하는 예외도 존재

3. 예외의 예

1) SyntaxError(문법 오류)

  • print('error)
  • `print('error'))

2) NameError(참조 없음)

  • a = 10, b = 15
    print(c)

3) ZeroDivisionError

  • print(100 / 0)

4) IndexError

  • x = [50, 70 ,90]
    print(x[[4])

5) KeyError

  • dic = {'Name': 'Lee', 'Age' = 41}
    print(dic['hobby'])

but) 여기서 get메소드를 통해 print(dic.get('hobby'))를 하게되면 none출력 됨 = 더 안정적

6) AttributeError(모듈, 클래스에 있는 잘못된 속성 사용 예외)

  • import time
    print(time.time2())  #time2라는 메소드 없을 때

7) ValueError

  • x = [10, 50, 90]   
    x.remove(200)

8) FileNotFoundError

  • f = open('test.txt') #test.txt 파일이 없을 때

9) TypeError

  • x = [1, 2]
    y = (1, 2)
    print(x + y)

list와 tuple은 더할 수 없음

4. 예외 처리 패턴

  • try: 에러가 발생 할 가능성이 있는 코드 실행
  • except 에러명1, except 에러명2: 여러개 가능
  • else: try블록의 에러가 없을 경우 실행
  • finally: 항상 마지막에 실행

1) 예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')
  • 'Kim'은 값이 있으니 오류 안남
Kim Found it! 1 in name
OK! else
  • 'Cho'는 없어서 오류
Not found it! - Occurred ValueError!

2) 예2 - 모든 에러
위와 같은 상황에서
except ValueError: 대신
except:만 쓸 경우 전체 에러를 의미(하지만 어떤 에러인지 알 수 없음)
= 같은 의미로 except Exception:

3) 예3 - 모든 에러시 에러 종류 확인
예1의 문에서

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

print(e)를 해주면 에러 종류 이름 뜸
✏️ 가장 좋은건 예제1번처럼 이름을 한정지어주고 as 이름 넣어주는게 좋음

4) 예4 - 예외 직접 발생

  • raise: 예외 직접 발생시키기
    a = 'Park'
    	if(a == 'Kim':
       	print('Pass')
       else:
       	raise ValueError
    except ValueError:
    	print('Occurred! Exception!')
    else:
    	print('OK! else!')
'Kim'이 아니면 ValueError 발생
profile
🐹

0개의 댓글