문수미님과 같은 내용입니다
타입체커가 코드를 분석해가면서 타입들이 바르게 연결 되었는지 검사하는데, 1. pyright 의 경우, while cur_node.pointer.pointer is not None: cur_node = cur_node.pointer 에서 cur_node를 cur_node. pointer 로 찍을때 point 가 None이 아닌지 명시되지 않아서 에러가 나는 걸로 보이구요.2. mypy의 경우 result = cur_node.pointer 로 할당 하면, pointer가 None인지 아닌지 mypy에서 알지 못해서 에러가 나는 걸로 보입니다. 3. 아래와 같이 작성하시면 코드가 좀 더 장황해지기는 하나 mypy, pyright 둘다 통과 합니다. mypy 랑 pyright랑 검사하는 방식이나 유추하는 문맥이 좀 다르긴 하네요. def pop(self) -> Optional[T]: if self.head is None: raise ValueError("Stack is empty") cur_node: Node[T] = self.head if cur_node.pointer is None: self.head = None return cur_node.item while cur_node.pointer is not None: # cur_node.pointer가 None 이 아님을 명시 if cur_node.pointer.pointer is not None: cur_node = cur_node.pointer continue result = cur_node.pointer cur_node.pointer = None return result.item if result is not None else None # result가 None이 아님을 명시