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

朴素模式匹配None处理异常:三目表达式未返回-1触发NoneType报错

问题产生原因

  • 函数仅在匹配到模式串时才会执行return逻辑,若遍历完整个文本都没有找到匹配子串,Python函数默认返回None,你编写的返回-1的逻辑完全没有覆盖这个场景。
  • 你写的return -1 if index is None else index语句没有实际作用:index是从range()生成的整数序列中取的迭代值,永远不可能为None,该三元判断不会触发返回-1的分支。
  • 本次测试的输入文本sample example for pattern matching中不存在子串and,因此函数最终返回None,执行print语句时用%d格式化None类型值,就触发了类型不匹配的报错。

修复方案

将未匹配的返回逻辑移到for循环外部即可,修改后代码如下:

def pattern_matching(text_string, pattern):
    # 边界处理:模式串长度大于文本直接返回-1
    if len(pattern) > len(text_string):
        return -1
    for index in range(len(text_string) - len(pattern) + 1): 
        j = 0
        while j < len(pattern): 
            if text_string[index + j] != pattern[j]: 
                break
            j += 1
        if j == len(pattern):
            return index
    # 遍历完所有位置无匹配,返回-1
    return -1

text = "sample example for pattern matching"
pattern = "and"
print("First pattern found at Index %d" % pattern_matching(text, pattern))

修改后代码运行会正常输出First pattern found at Index -1,无报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:09:03