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

如何在可为None的字符串变量中检查子串是否存在?

处理可能为None的字符串子串查找问题

当变量brand可能为None或字符串时,除了先判断brand is not None再执行子串查找的嵌套写法,还有几种更简洁的实现方式:

方法1:用空字符串兜底(or操作符)

利用Python的逻辑短路特性,当brand为None时,用空字符串替代,这样in操作不会触发异常,且空字符串中必然找不到目标子串,结果符合预期。

# brand为None的情况
brand = None
if "Vans" in (brand or ""):
    print("Y")
else:
    print("N")
# 输出 - N

# brand为字符串的情况
brand = "Vans.com"
if "Vans" in (brand or ""):
    print("Y")
else:
    print("N")
# 输出 - Y

方法2:三元表达式显式处理

用三元表达式明确处理None的情况,可读性更强,逻辑清晰。

# brand为None的情况
brand = None
target = "Vans"
if target in (brand if brand is not None else ""):
    print("Y")
else:
    print("N")
# 输出 - N

# brand为字符串的情况
brand = "Vans.com"
if target in (brand if brand is not None else ""):
    print("Y")
else:
    print("N")
# 输出 - Y

方法3:利用getattr(偏技巧性)

通过getattr获取对象的__contains__方法(in操作本质调用的就是这个方法),如果brand是None,则返回一个永远返回False的lambda函数,避免异常。不过这种写法可读性稍弱,日常场景更推荐前两种。

# brand为None的情况
brand = None
if "Vans" in getattr(brand, '__contains__', lambda x: False)():
    print("Y")
else:
    print("N")
# 输出 - N

# brand为字符串的情况
brand = "Vans.com"
if "Vans" in getattr(brand, '__contains__', lambda x: False)():
    print("Y")
else:
    print("N")
# 输出 - Y

这些方法的优势在于避免了嵌套的if判断,代码更紧凑简洁,同时保持逻辑的清晰性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:05:33