[Python] if문에 왜 bool 타입이 아닌 변수를 검사하죠?

devhans·2024년 6월 13일

Python

목록 보기
1/8
post-thumbnail

배경

파이썬으로 코딩을 하다 보면 조건식에 Bool값으로 생각되지 않는 타입이 if문 조건식 자리에 들어가 있습니다.
어떤 타입이 어떨때 False인지 True인지 포스팅해 두려 합니다.
테스트 환경 : python_3.9.18

파이썬 기본 if문 진위 값 검사 방법

종류형태조건식에서의 평가
NoneNoneFalse
str""False
int0False
float0.0False
tuple()False
dict{}False
list[]False

tuple, dict, list는 빈 형태가 아니라면 True입니다.
int, float는 0, 0.0이 아니라면 True입니다.
str은 "" 빈 문자열이 아니라면 True입니다.

if문 내에서 빈 문자열이 None과 같은가 검사하면 False가 출력되므로 주의합시다.

empty_string = ""
if empty_string == None:
    print("참")
    print(empty_string == None)
else:
    print("거짓")
    print(empty_string == None)

실제 활용

class MyCallback:
	
    # Callable은 함수를 인자로 받는 타입
    # 예를 들면 아래와 같은 my_function을 __init__시에 인자로 받을 수 있다.
    # def my_function(arg: MyKafkaRecord): -> None
    #    pass
    
    def __init__(self,
    			 kafka_record: MyKafkaRecord
                 callback: Optional[Callable[[MyKafkaRecord], None]] = None):   
        self.kafka_record = kafka_rcord         
        self.callback = callback
        
        
    def check_completion(self, exception: MyError) -> None:
    	if self.callback: 
    		try:
        		self.callback(self.kafka_record)
        	except Exception as e:
        		prinf(f"kafka callback accept exception : {e}")

위와 같은 코드가 있을 때, init 시에 인자로 callback을 채워주지 않았다면 Noneself.callback에 할당됩니다.
이후 check_completion 메소드에서 if문의 조건 self.callback이 None라면 try문이 실행되지 않습니다.

profile
책 읽고 운동하기

0개의 댓글