You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

断言Menu类实例的str方法返回空字符串触发AssertionError原因求解

报错原因分析
  • 方法调用逻辑错误:Python中用于自定义实例转字符串逻辑的魔术方法是__str__,调用时要么使用str(实例对象)的标准写法,要么显式调用实例.__str__()。你代码中写的menu.str()是调用名为str的普通实例方法,你贴出的代码中并没有定义该方法,即使你的Menu类继承了Node类,也匹配不到对应方法。
  • __str__方法缺少空返回分支:你当前的__str__实现仅在self.a_list存在真值元素时才会返回字符串,其余所有场景(self.a_list为空、所有元素都为假值)都不会走到return分支,Python方法无显式返回时默认返回None,None和空字符串""比较结果为假,自然触发AssertionError。
  • 代码存在多处基础语法/属性错误:
    • __init__方法中self.counter = counter的右值counter未提前定义,运行直接抛出NameError
    • __str__中遍历的self.a_list属性不存在,你在__init__中定义的列表属性是self.my_list,运行会抛出AttributeError
    • 方法中的print()仅做控制台输出,不会作为方法返回值,无实际作用。
修复方案

首先修复Node类的逻辑:

class Node:
    def __init__(self):
        # 移除未定义的counter赋值,按需可后续自行补充定义
        self.my_list = []
        
    def __str__(self):
        # 先筛选有效元素,无有效元素时直接返回空字符串
        valid_elements = [element for element in self.my_list if element]
        if not valid_elements:
            return ""
        return "\n".join(f"{counter}. {element}" for counter, element in enumerate(valid_elements, 1))

再修改断言的调用写法(同时确保你的Menu类继承了修复后的Node类):

menu = Menu() 
assert str(menu) == ""

内容的提问来源于stack exchange,提问作者TreeTree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:36:03