파이썬으로 코딩을 하다 보면 조건식에 Bool값으로 생각되지 않는 타입이 if문 조건식 자리에 들어가 있습니다.
어떤 타입이 어떨때 False인지 True인지 포스팅해 두려 합니다.
테스트 환경 : python_3.9.18
| 종류 | 형태 | 조건식에서의 평가 |
|---|---|---|
| None | None | False |
| str | "" | False |
| int | 0 | False |
| float | 0.0 | False |
| 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을 채워주지 않았다면 None이 self.callback에 할당됩니다.
이후 check_completion 메소드에서 if문의 조건 self.callback이 None라면 try문이 실행되지 않습니다.