返回None还是空集合?防御式编程的关键细节

我们来做一个假设,假设你有一个函数用于查找数据库中的某个集合结果,当查不到数据时,应该返回什么?

错误用法:

复制代码
def get_users(department):
    # 查不到返回 None
    if department == "财务":
        return None
    return ["张三", "李四"]

正确用法:

复制代码
def get_users(department):
    if department == "财务":
        return []
    return ["张三", "李四"]

返回 \[\](空集合)而不是 None 能确保调用者在不判断的情况下直接使用:

复制代码
for user in get_users("财务"):

    print(user)  # 不会报错

这在写 API SDK、数据接口、中间层函数时尤其重要。减少调用方的防御代码,是良好接口设计的关键。

可能有朋友要问:为什么空集合更好?有以下几个大致的原因:

  • 遵循最小意外原则:空集合是合法的可迭代对象
  • 避免 NoneType 错误:最常见的 Python 运行时错误之一
  • 简化调用逻辑:无需前置判空检查
  • 类型一致性:保持返回类型稳定(list → list)

那么何时该返回 None?通常在下面三种情况下:

  • 操作失败且无合理默认值时
  • 需要区分"无结果"和"错误"时
  • 函数名暗示可能返回 None
相关推荐
JosieBook4 分钟前
【数据库】时序预测能力的分级进化:TimechoAI如何让每一类用户都能精准预见未来
java·开发语言·数据库
加号38 分钟前
【C#】 文件与目录管理:创建、删除操作的技术解析
开发语言·c#
小帅热爱难回头13 分钟前
编写Skill生成AI落地项目系统架构
python
diving deep1 小时前
脚本速览-python
开发语言·python
一生了无挂1 小时前
Java处理JSON技巧教学(从基础到高阶实战全覆盖)
java·开发语言·json
swordbob1 小时前
Spring 单例 Bean 是线程安全的吗?
java·开发语言
2601_951643772 小时前
Python第一,Java跌出前三,C语言杀回来了
java·c语言·python·编程语言排行·技术趋势
小小编程路2 小时前
C++ 异常 完整讲解
开发语言·c++
AI科技星3 小时前
数术工坊 · 第四卷 橡皮泥江湖(拓扑学)【完整定稿】
c语言·开发语言·汇编·electron·概率论·拓扑学
张忠琳3 小时前
【Go 1.26.4】Golang Select 深度解析
开发语言·后端·golang