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
我正在对地址进行一些模糊匹配,并且正在对高分进行过滤。如果我的数据集中存在该分数,那么我想调用另一个函数来查看数据并检查是否有 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