<개인공부>/[Python]

[python] 파이썬 assert (가정 설정문)에 대해서

BlockDMask 2021. 7. 14. 00:30
반응형

안녕하세요. BlockDMask 입니다.
오늘은 파이썬 assert 에 대해서 이야기 해보려 합니다.

<목차>
1. 파이썬 assert 설명과 간단 사용법
2. 파이썬 assert 예제

 

 

1. assert 설명 


1-1) python assert 설명

예외를 발생시키는 예외처리랑 비슷하지만, 예외처리는 에러가 발생했을때 어떤 처리를 하기위한 코드이고, 이 assert (가정 설정문)은 어떤 조건이 True임을 보증하기 위해서 사용하는 것 입니다.

오류를 발생시키는 raise와 비슷하지만 다릅니다. raise에 대한 자세한 설명이 필요하다면 [바로가기]

raise는 만약에 오류가 발생했을때 "except 와 함께 이렇게 처리해라" 는 뜻이고

assert는 이 조건이 참일때 코드는 내가 보장한다. 이 조건은 올바르다!
하지만 이 조건이 거짓이라는 것은 내가 보증하지 않은 동작이다. 그러니 AssertionError를 발생해라.

이런 식의 흐름입니다.

 

1-2) python assert 사용 방법

assert [조건], [오류메시지]

assert 키워드 뒤에 [조건]을 입력하고 그 뒤에 콤마(,) [오류메시지]를 입력합니다.
이 asset는 [조건]이 True인 경우 그대로 코드 진행, False인 경우 어설트에러 발생하게 됩니다.

[조건] : 이 조건이 True이면 그대로 코드가 진행되고, False라면 AssertionError가 발생합니다. 
[오류메시지] : 앞에 조건이 False인 경우 "AssertionError와 함께 남길 메시지" 입니다. 이 부분은 생략이 가능합니다. 

간단하게 예시를 들어보면 이런 코드가 있을 수 있습니다.

name = "2BlockDMask"
assert name[0].isalpha(), "이름의 맨 처음은 알파벳으로 시작해주세요"

이런식으로 만약에 아이디나 이름을 입력받으려할때 첫 번째 시작은 무조건 알파벳임을 보장해야하는 경우
사용할 수 있겠죠?

 

 

2. assert 예제 


2-1) 파이썬 assert 예제1

a = 10

# True 인경우
print("1. assert True 인 경우")
assert a == 10, "a is not 10" 

print("끝1")


# Fasle 인 경우
print("2. assert False 인 경우")
assert a == 999, "a is not 999"

print("끝2")

예제 결과를 보면 assert가 True인 경우에는 스무스 하게 코드가 지나가고 "끝1"도 잘 나오는 것을 볼 수 있습니다.

assert a == 999, "a is not 999" 해당 코드에서는 a가 10이므로 a == 999 라는 조건이 맞지 않습니다.
assert의 조건이 False가 되었으므로 "a is not 999"라는 메시지와 함께 AssertionError가 나오는 것을 볼 수 있습니다.

 

 

2-2) 파이썬 assert 예제2

age = int(input("나이 입력 : "))

assert age >= 0, '나이가 마이너스인게 가능한가 휴먼?'

print(f"당신의 나이는 : {age} 입니다")

유저로부터 나이를 입력받아야 하는 상황일때

나이는 무조건 0 보다 크거나 같아야 합니다. 이런 상황에서 assert를 이용해서 age는 항상 0 보다 크거나 같음을 보장한다고 생각하고 아래 코드를 작성할 수 있습니다.

(지금 예제는 너무 단순하기는 하지만) 이처럼 assert는 무조건 조건이 참이어야 하는 경우에 사용하기 적절합니다. 

assert를 사용해서 에러를 발생시켜서 프로그램을 종료시키는 것도 방법이지만,
if age < 0 일때 다시 입력하라던지 하는 방법으로도 코드를 작성할 수 있겠죠?

상황에 맞게 각자 판단해서 코드를 작성하시면 될 것 같습니다.

 

이상으로 파이썬 assert 에 대한 포스팅을 마치겠습니다. 감사합니다.

반응형