簡體   English   中英

局部變量返回顯示錯誤信息

[英]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_negativesif條件不正確,因此從未運行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM