[英]local variable return shows error message
我認為這不是一個新問題,但我認為顯示此消息很奇怪 - 分配前引用了局部變量df_ret - 這是我的 function 重新計算不平衡數據集:
def down_sample(df, target, positive_label, negative_label):
positives = df.filter(df[target] == positive_label)
negatives = df.filter(df[target] == negative_label)
num_positives = positives.count()
num_negatives = negatives.count()
if (num_positives > num_negatives): # down_sample positives
sampled_df = positives.sample(withReplacement=False,
fraction=num_negatives/num_positives,
seed=SEED)
df_ret = sampled_df.union(negatives)
return df_ret
錯誤消息“賦值前引用的局部變量 df_ret”在這里非常准確 - function 運行並且num_positives > num_negatives
的if
條件不正確,因此從未運行if
塊中的代碼,因此從未分配df_ret
變量(從未聲明和初始化)。
您可以使用幾種模式來解決此問題,具體取決於此 function 的客戶的期望:
如果不滿足if
條件,則在 function 內拋出異常,然后讓調用者catch
異常
在if
塊之前初始化df_ret
變量,使得 function 在if
條件不滿足時返回一個默認值
來自gladiesgoodluck 的好答案,我還要添加一個快速修復,即進一步縮進return
命令,使其僅在滿足if
條件時執行。 您的代碼將變為:
def down_sample(df, target, positive_label, negative_label):
positives = df.filter(df[target] == positive_label)
negatives = df.filter(df[target] == negative_label)
num_positives = positives.count()
num_negatives = negatives.count()
if (num_positives > num_negatives): # down_sample positives
sampled_df = positives.sample(withReplacement=False,
fraction=num_negatives/num_positives,
seed=SEED)
df_ret = sampled_df.union(negatives)
return df_ret
return something_else # OPTIONAL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.