返回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
相关推荐
冬夜戏雪3 小时前
agent的trace 和eval
开发语言·前端·javascript
程序员小八7774 小时前
Java 快速转 Go
java·python·golang
Sagittarius_A*4 小时前
Burst Lab | PHP 审计 13|反序列化(三):POP 链构造与 Gadget Chain 分析
开发语言·web安全·php·代码审计·反序列化
职场的momo4 小时前
11个后端与AI岗位同时开放:Java、网关、推理优化怎么匹配
java·开发语言·人工智能
蓝速科技4 小时前
蓝速科技丨新旧楼宇混杂场景下会议室预约门牌屏一体化改造方案
开发语言·科技·php
梦想的旅途25 小时前
Python实现企业微信文本消息发送
开发语言·python·企业微信
%475 小时前
DAY41
pytorch·python
敲代码还房贷5 小时前
VMware17 + Ubuntu22.04 共享 完整步骤
linux·python·ubuntu
大鹏说大话5 小时前
美业微信会员系统哪个好
开发语言
测试19985 小时前
Selenium 无法定位元素的几种解决方案
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例