python 正则表达式防止非类型错误

python regex prevent nonetype error

我在下面的代码中搜索模式并将模式分配给变量 num(如果模式存在)。

for row1 in cursor1:
    try:
        m = re.search(r"^[0-9]+(?=\s)", row1[0])
        num = m.group()
    except Exception as e:
        pass

然后我在下面的代码中使用 num 变量:

z1=(item for item in numlist if item[6]==num and harversine.myhaversine(custx,custy,item[2],item[3])<150)

我想消除 num 变量,并将与正则表达式匹配的文本直接与 item[6] 进行比较,如 if item[6]==re.search(r"^[0-9]+(?=\s)",row1[0]).group() 中那样,但是对于不匹配的行,这当然会给我一个错误有图案。如何在不出现 nonetype has no attribute group() 错误的情况下实现我想要做的事情? PS:此处未显示的整体代码遍历行,创建元组并根据 if 语句的实现分配必要的值。我想更改代码中显示的正则表达式匹配部分以获得更好的性能,因为并非所有行都使用 num 变量。我希望正则表达式 运行 仅适用于使用此变量的行。

正如 Karoly Horvath 指出的那样,您可以利用不匹配 returns None object

的文本这一事实
In [2]: m = re.search(r"^[0-9]+(?=\s)", row1[0])
Out [2]: None

你可以在 if 条件下使用它

z1=(item for item in numlist if (re.search(r"^[0-9]+(?=\s)",row1[0]) and item[6]==re.search(r"^[0-9]+(?=\s)",row1[0]).group()) and harversine.myhaversine(custx,custy,item[2],item[3])<150)

return re.search(r"^[0-9]+(?=\s)",row1[0]) 的值,即 None 的计算结果为 false,使整个条件的值为 false。