일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- nlp
- 코딩
- 코딩 테스트
- 브루트포스
- 순열
- 그래프
- 구글 킥스타트
- 코딩테스트
- AI
- 프로그래밍
- PYTHON
- 동적프로그래밍
- 운영체제
- 파이썬
- 리눅스
- 네트워크
- 알고리즘
- 킥스타트
- OS
- dp
- linux
- DFS
- 딥러닝
- google coding competition
- kick start
- BFS
- 동적 프로그래밍
- 백준
- CSS
- 프로그래머스
- Today
- Total
오뚝이개발자
[Python] assert, raise 본문
assert
assert는 뒤에 오는 조건이 False면 AssertionError를 발생시킨다.
>>> a = 3
>>> assert a == 2
#결과
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError
다음과 같이 assert 조건, "에러문"의 형식으로 사용할 수도 있다.
def test(t):
assert type(t) is int, '정수 아닌 값이 있네'
for i in lists:
test(i)
#결과
AssertionError: 정수 아닌 값이 있네
즉, assert는 가정설정문이라고 해서 특정 값이나 값의 범위를 보장하기 위해 프로그램 중간중간에 사용한다. 예컨대, 어떤 함수는 정수값만을 input으로 받아야 한다거나, return값이 정수여야만 하는 경우가 있을 수 있다. 이러한 경우에 특정 조건을 보장하기 위해 사용한다.
raise
raise는 강제로 예외를 발생시킬 수 있다. 예컨대, 어떠한 경우에 아래 로직을 처리하지 않고 에러로 빼서 처리하고 싶을 때 주로 사용한다.(내가 일을 할때도 그랬고, 실제로 현업에선 이 raise를 많이 사용한다.)
while 1:
a = input("Enter number : ")
try:
if int(a) == 1:
raise ValueError
elif int(a) == 2:
raise TypeError
elif int(a) == 3:
raise NameError
print("Number you entered is", float(a))
except ValueError:
print("1 entered")
except TypeError:
print("2 entered")
except NameError:
print("3 entered")
else:
break
finally:
print("-------------------")
위의 예에선 입력받은 값이 1,2,3일 때, 각각 ValueError, TypeError, NameError를 발생시켰다. 보통 이렇게 raise는 try...except문과 함께 쓰인다. 위 예제를 실행한 모습은 아래와 같다.
Enter number : 1
1 entered
-------------------
Enter number : 2
2 entered
-------------------
Enter number : 3
3 entered
-------------------
Enter number : 4
Number you entered is 4.0
-------------------
그런데 이렇게 이미 deserved된 에러가 아니라 자신이 만든 특정 상황의 에러가 발생한 경우 별도 처리를 하기를 원할 수도 있다. 이러한 경우 아래와 같이 직접 Error를 만들어 조건을 줄 수 있다.
class InputOne(Exception):
def __init__(self):
super().__init__("1 entered")
class InputTwo(Exception):
def __init__(self):
super().__init__("2 entered")
class InputThree(Exception):
def __init__(self):
super().__init__("3 entered")
while 1:
a = input("Enter number : ")
try:
if int(a) == 1:
raise InputOne
elif int(a) == 2:
raise InputTwo
elif int(a) == 3:
raise InputThree
print("Number you entered is", float(a))
except Exception as e:
print("Exception occured : ", e)
else:
break
finally:
print("-------------------")
위 예제를 실행한 결과는 아래와 같다.
Enter number : 1
Exception occured : 1 entered
-------------------
Enter number : 2
Exception occured : 2 entered
-------------------
Enter number : 3
Exception occured : 3 entered
-------------------
Enter number : 4
Number you entered is 4.0
-------------------
assert는 주로 값이 어떠한 조건을 만족해야 한다는 것을 보장하기 위해(조건을 만족하지 못할 경우 강제 종료시킨다) 사용한다. 반면, raise는 try...except문과 함께 사용해서 예외 상황에 대한 별도의 처리를 하도록 한다.
References
'Language > 파이썬' 카테고리의 다른 글
[Python] 파이썬 가비지 콜렉터란?(Garbage Collector; GC) (0) | 2021.11.20 |
---|---|
[Python] 얕은 복사(shallow copy)와 깊은 복사(deep copy) (0) | 2021.04.12 |
[Python] list와 tuple의 차이, 사전(dictionary)과 set자료형의 가능한 key값 (0) | 2021.01.11 |
[Python] deque 사용법 (0) | 2020.12.15 |
[Python] 파이썬 내장함수 시간복잡도 (0) | 2020.12.15 |