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

时间:2015-11-20 21:16:34

标签: python regex arcpy

我有下面的代码搜索模式,如果模式存在,则将模式分配给变量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变量。我希望仅对使用此变量的行运行正则表达式。

1 个答案:

答案 0 :(得分:0)

正如Karoly Horvath指出的那样,你可以利用不匹配的文本返回无对象

In [2]: m = re.search(r"^[0-9]+(?=\s)", row1[0])
Out [2]: None

您可以在条件

中使用此功能
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)

re.search(r"^[0-9]+(?=\s)",row1[0])的返回值,即None将评估为false,使整个条件的值为false。