if 语句中的函数不返回值,而是得到 "Name Error"

Function within if-statement not returning a value, instead getting "Name Error"

我正在对地址进行一些模糊匹配,并且正在对高分进行过滤。如果我的数据集中存在该分数,那么我想调用另一个函数来查看数据并检查是否有 sales/calls 与之关联。

我想最终 return 一个符合该函数标准的值列表。调试时我可以看到“sales_and_calls_test”函数有效。我看到值附加到我的列表中,但是,当我进入下一次迭代时,我看到我的调试手表中的列表从一个值更改为“名称错误:名称”call_list + sales_list " 未定义

有人可以查看我的语法并告诉我我缺少什么吗?谢谢!

这是我的代码:


def sales_and_calls_test(v_sales, v_calls):
  calls_list = []
  sales_list = []
  if v_sales > 1:
    print(v_sales, v._1)
    sales_list.append(v_sales)

  if  v_calls > 1:
      print(v_calls, v._1)
      calls_list.append(v_calls)
  
  return calls_list, sales_list


for v in match_table.itertuples():
    #print(v)
    if not string_len_test(l.Address_1, v.Address_2):
       
       lev_score = lev(l.Address_1, v.Address_2)
       fuzz_score = fuzz.token_sort_ratio(l.Address_1, v.Address_2)
       if  fuzz_score >= 90:
          sales_and_calls_test(v._6, v._7)
          #print(lev_score, fuzz_score)
        else: 
          if fuzz_score == 87: 
            print('close', v.Address, l.Address_2, v._1, v._6, v._7, v._8)
            print(lev_score, fuzz_score)
    
    else:
      continue

##*** side note does anyone know why after I perform itertuples() 
## that some of my column's change from their names to _number? 

我明白了。我必须让我的第一个函数 return 成为 true/false.

然后我意识到我需要更好地比较不同的字符串,长度太笼统了。相反,我选择使用 Jaro 距离。

我为距离设置了一个条件,如果满足该条件,我return输入了一个值“True”

这让我的数据减少了很多!然后我调用了“sales_and_calls_test”函数 我将 return 值更新为 return 列表,如果它不符合标准,则通过(这进一步减少了我的数据!)

这是我的更新:

def sales_and_calls_test(v_sales, v_calls):

  if v_sales > 1:    
    sales_list.append(v_sales)
    return sales_list
  elif  v_calls > 1:     
      calls_list.append(v_calls)
      return calls_list
  else:
    pass

  

for v in match_table.itertuples():
    #print(v)
    if string_len_test(l.Address_1, v.Address_2) == True:
       
       lev_score = lev(l.Address_1, v.Address_2)
       fuzz_score = fuzz.token_sort_ratio(l.Address_1, v.Address_2)
       if  fuzz_score >= 90:
          sales_and_calls_test(v._6, v._7)
          #print(lev_score, fuzz_score)
        else: 
          if fuzz_score == 87: 
            print('close', v.Address, l.Address_2, v._1, v._6, v._7, v._8)
            print(lev_score, fuzz_score)
    
    else:
      continue