doctest 报错 “got nothing” 表示函数实际未产生任何可显示的输出(如返回 none 或无 print),但测试用例却期望看到具体值(如 'private: 80'),本质是返回值与预期不匹配。
doctest 报错 “got nothing” 表示函数实际未产生任何可显示的输出(如返回 none 或无 print),但测试用例却期望看到具体值(如 'private: 80'),本质是返回值与预期不匹配。
在你的 best_apartment 方法中,doctest 明确期望输出字符串 PRIVATE: 80(注意:这是打印效果或返回值的字符串表示),但当前实现存在两个关键问题:
-
函数声明为 -> None,却试图返回 current_node.apartment
类型提示与实际行为矛盾:标注返回 None,但代码末尾有 return current_node.apartment。若 current_node.apartment 是一个对象(如 Apartment 实例),其 __str__ 或 __repr__ 方法需返回类似 'PRIVATE: 80' 的字符串;否则 doctest 将无法匹配。 -
空树分支返回 None,而 doctest 未覆盖该情况
当 self.is_empty() 为 True 时,函数执行 return None —— 而 Python 交互式环境中 None 不会显示任何内容,导致 doctest 观察到 “Got nothing”,与期望的 'PRIVATE: 80' 完全不符。
✅ 正确做法是:确保函数始终返回一个可显示的、符合预期格式的字符串或对象。例如:
def best_apartment(self) -> str:
"""Return (one of) the apartment(s) with the best evaluation
score in the BSTTree.
>>> apartments = read_apartment_data("apartments.csv")[0:300]
>>> bst = BSTTree()
>>> bst.build_tree(apartments)
>>> bst.best_apartment()
'PRIVATE: 80'
"""
if self.is_empty():
return "No apartment available" # 避免 None
current_node = self
while current_node.right is not None:
current_node = current_node.right
# 假设 apartment 对象有 __str__ 返回 'TYPE: SCORE' 格式
return str(current_node.apartment)
⚠️ 注意事项:
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
- doctest 默认比对 repr() 输出,若期望纯字符串,请在 docstring 中用单引号明确写出(如 'PRIVATE: 80');
- 确保 current_node.apartment 不为 None,可在返回前加断言:assert current_node.apartment is not None, "Apartment data missing";
- 运行调试时,直接在 Python 交互终端中执行测试语句(如 bst.best_apartment()),观察真实输出,比依赖 doctest 报错更直观。
总结:“Got nothing” 不是语法错误,而是语义失配——你返回了不可见的 None,而测试期待可见值。修正的核心是统一返回类型、避免隐式 None,并确保所有分支都产出可断言的输出。
就爱读