首页 > 解决方案 > 局部变量返回显示错误信息

问题描述

我认为这不是一个新问题,但我认为显示此消息很奇怪 - 分配前引用了局部变量df_ret - 这是我重新计算不平衡数据集的函数:

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

标签: pythonfunctionvariablesreturnlocal

解决方案


错误消息“局部变量 df_ret 在赋值之前引用”在这里非常准确 - 函数运行并且if条件num_positives > num_negatives不正确,因此if块中的代码从未运行,因此df_ret从未分配变量(从未声明和初始化)。

您可以使用几种模式来解决此问题,具体取决于此功能的客户的期望:

  • if如果条件不满足,则在函数内抛出异常,然后让调用者catch异常

  • 在block之前初始化df_ret变量if,让函数在if条件不满足时返回一个默认值


推荐阅读