0

我正在尝试构建一个朴素的贝叶斯分类器,它从文本文件中读取数据并输出到文本文件中,我的代码出现错误,说返回在函数之外,但是我看不到任何错误

# compute the relative frequencies of the
# 2nd explanatory variable taking on the
# values 'A', 'B' and 'C'
# and return a dictionary with these values
def getCatProbs(self, data):
  a_count = 0
  b_count = 0
  c_count = 0
  probs = {}
for row in data:
  if row[1] == ">50K":
     a_count = a_count + 1
  if row[1] == "<=50K":
     b_count = b_count + 1
  else:
     c_count = c_count + 1

     probs[">50K"] = float(a_count)/len(data)
     probs["<=50K"] = float(b_count)/len(data)
     probs['C'] = float(c_count)/len(data)

  return probs
4

3 回答 3

2

在 python 中,缩进很重要。例如,在您的代码中,函数getCatProbs的定义在 line 之后完成probs = {},这显然将函数体留在了return外部。

以下是这段代码在适当缩进后的样子:

# compute the relative frequencies of the
# 2nd explanatory variable taking on the
# values 'A', 'B' and 'C'
# and return a dictionary with these values
def getCatProbs(self, data):
    a_count = 0
    b_count = 0
    c_count = 0
    probs = {}
    for row in data:
        if row[1] == ">50K":
            a_count = a_count + 1
        if row[1] == "<=50K":
            b_count = b_count + 1
        else:
            c_count = c_count + 1

    probs[">50K"] = float(a_count)/len(data)
    probs["<=50K"] = float(b_count)/len(data)
    probs['C'] = float(c_count)/len(data)

    return probs
于 2013-04-25T19:59:01.777 回答
1

您的回报确实超出了您的职能。整个for循环在您的功能之外。我认为您的意思是将for循环再缩进一层,以便它在函数内部。

于 2013-04-25T19:55:30.293 回答
0

格式在 Python 中是有意义的。

在我看来,您的缩进不一致。for 循环和后续行似乎已关闭。

我建议使用一个好的 IDE。JetBrains 是市场上最好的。试试PyCharm。犯这样的错误会更加困难。

于 2013-04-25T19:55:46.107 回答