Python自定义StringSet类触发AssertionError,但打印输出与assert条件匹配
问题排查结果
触发AssertionError的核心原因
你的__str__方法返回的字符串末尾多了一个多余的空格,和断言预期的字符串不匹配。
你当前的__str__实现逻辑是,每拼接一个单词就额外加一个空格,遍历完所有单词后,末尾会多出来一个空格:
def __str__(self): s = "" for word in self.__words: s+= f"{word}" s+=" " return "{}".format(s)
最终str(set1)的实际值是'word1 word2 word3 '(末尾带空格),和你断言里写的'word1 word2 word3'内容不一致,所以触发了报错。你直接打印时末尾空格不可见,才会误以为输出符合预期。
修复方法
把__str__方法改成用join拼接单词,自动规避末尾多余空格的问题:
def __str__(self): return ' '.join(self.__words)
其他可优化的问题
你当前的size方法返回的是字符串类型,不符合常规工具类的设计逻辑,后续如果需要用size()的返回值做数值判断会出错:
# 原有错误实现 def size(self): counter = 0 for word in self.__words: counter += 1 return f"{counter}"
可以直接简化为返回整数:
def size(self): return len(self.__words)
内容的提问来源于stack exchange,提问作者TreeTree
相关产品推荐
相关产品推荐

