피드로 돌아가기
Dev.toBackend
원문 읽기
Python Truthy/Falsy 메커니즘으로 인한 논리 오류 및 is None 검증의 중요성
La importancia de no ser None
AI 요약
Context
HTML 북마크 데이터를 트리 구조로 파싱하는 Python 도구 설계 중 루트 리스트 할당 과정에서 예기치 않은 중복 할당 발생. if not self._bms 구문을 통한 None 체크 로직이 의도와 다르게 동작하며 객체 존재 여부와 관계없이 조건문 내부로 진입하는 병목 현상 확인.
Technical Solution
__len__메서드 구현 시 Python의 Sequence 프로토콜이 활성화되어 객체의 Truthy/Falsy 판정 기준이 변경되는 특성 분석bool()평가 시__len__이 0을 반환하면 객체가 존재함에도False로 취급되는 Python 언어 스펙의 제약 사항 식별collections.abc.Sized클래스가__subclasshook__을 통해__len__존재 여부만으로 하위 클래스로 인식하는 동적 타이핑 메커니즘 파악- 암묵적 형변환을 유발하는
if x:대신if x is not None:을 사용하여 명시적 Identity 비교 방식으로 로직 수정 __getitem__기반의 레거시 Iteration 방식과__iter__기반의 현대적 Iterable 프로토콜 차이점에 따른 사이드 이펙트 검토
실천 포인트
1. 객체 존재 여부 확인 시 `if object:` 대신 반드시 `if object is not None:`을 사용하였는가?
2. `__len__` 메서드를 구현한 커스텀 클래스가 Boolean 문맥에서 어떻게 평가되는지 검증하였는가?
3. `collections.abc` 프로토콜(Sized, Iterable 등) 채택 시 발생 가능한 암묵적 타입 변환 가능성을 고려하였는가?