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

python正则表达式防止非类型错误,python,regex,arcpy,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 harve

下面的代码搜索一个模式,如果该模式存在,则将该模式分配给变量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变量,并将与regex直接匹配的文本与项[6]进行比较,就像项[6]==re.searchr^[0-9]+?=\s,row1[0]。group一样,但这当然会给没有该模式的行带来错误。如何在不获取nonetype has NOT属性组错误的情况下实现我正在尝试的操作?
PS:此处未显示的整个代码循环行,创建元组,并根据if语句的实现分配必要的值。我想更改代码中显示的正则表达式匹配部分以获得更好的性能,因为并非所有行都使用num变量。我希望只为使用此变量的行运行正则表达式。

正如Karoly Horvath所指出的那样,可以利用不匹配的文本不返回任何对象这一事实

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)

返回re.searchr^[0-9]+?=\s的值,第1行[0]即,无值将计算为false,使整个条件的值为false。

将项[6]的赋值置为false在try块和else块中对上述tryNoneType的理解没有属性组-我确信您知道如何检查无…@R Nar不幸的是,我不能走这条路线,因为项[6]是在理解中生成的,我使用生成器,所以我需要它位于它所在的位置。@Karoly Horvath很抱歉,但我不明白你的意思。你想将num的值赋给项[6]还是在if条件下比较它?很高兴知道它对你有用。我喜欢你在我的编辑中纠正错误的地方