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

Python如何实现None安全的len及in(子串匹配)操作?

Python None安全的len/in操作简洁实现方案

最简写法(兼容所有Python3版本)

利用Python原生的布尔真值规则和短路求值特性,你原有的判断逻辑可以直接简化为:

if agreements and agreements[0].action_taken and 'system' in agreements[0].action_taken:
    # 业务逻辑

简化原理

  • Python布尔上下文中,None、空列表、空字符串、空字典等对象都会被判定为False,因此不需要显式写agreements != None和len(agreements) > 0,直接写if agreements即可覆盖这两个判断
  • 逻辑与and是短路求值的,前面的条件不满足时不会执行后面的判断:如果agreements为空/None,就不会执行取agreements[0]的操作;如果action_taken为None/空,也不会执行'system' in xxx的判断,完全不会出现空指针报错

优化小提示

Python规范中判断是否为None统一用is not None而非!= None,可以避免自定义对象重写__eq__方法导致的异常判断。

3.10+ 进阶写法(结构模式匹配)

如果你的运行环境支持Python 3.10及以上版本,可以用结构模式匹配写得更清晰,适配边界场景的扩展性也更强:

match agreements:
    # 匹配非空列表,且第一个元素的action_taken为字符串类型,包含system子串
    case [item, *rest] if hasattr(item, 'action_taken') \
        and isinstance(item.action_taken, str) \
        and 'system' in item.action_taken:
        # 业务逻辑

通用工具封装

如果你需要频繁做None安全的包含判断、长度判断,可以封装通用工具函数复用:

def safe_contains(content: any, substring: str) -> bool:
    return isinstance(content, str) and substring in content

def safe_len(obj: any) -> int:
    return len(obj) if obj is not None else 0

使用示例:

if safe_len(agreements) > 0 and safe_contains(agreements[0].action_taken, 'system'):
    # 业务逻辑

内容的提问来源于stack exchange,提问作者gene b.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:06:03