为什么这个Python函数返回UnboundLocalError?

时间:2015-07-18 15:03:05

标签: python

有人能解释为什么这个函数会返回以下错误吗?

功能:

def scatter_x_y(self,filtered_data,x_parameter,y_parameter):
    for i in range(len(filtered_data)):
        if filtered_data[i].name==x_parameter:
            x=filtered_data[i]
            x_index=list(x.keys())
        elif filtered_data[i].name==y_parameter:
            y=filtered_data[i]
            y_index=list(y.keys())
    print x_index

错误:

UnboundLocalError: local variable 'x_index' referenced before assignment

2 个答案:

答案 0 :(得分:2)

如果循环从不执行,则x_index未定义。 y_index;它的价值只是简单地看到,因为它没有在它所见的elif之外定义。

您可能打算在循环内部移动打印,因为x_indexy_index的值仅存在一次迭代。否则,打印它或使用该值只会使您获得最后计算的值。然后,您需要在循环中声明它们 ,或者当我们打印出来时,我们会遇到同样的问题。这也可以防止在我们真正期望打印出来时不必要地重复打印任何一个值。

def scatter_x_y(self,filtered_data,x_parameter,y_parameter):
    for i in range(len(filtered_data)):
        x_index, y_index = None, None
        if filtered_data[i].name==x_parameter:
            x=filtered_data[i]
            x_index=list(x.keys())
        elif filtered_data[i].name==y_parameter:
            y=filtered_data[i]
            y_index=list(y.keys())
        if x_index:
            print "x_index={}".format(x_index)
        if y_index:
            print "y_index={}".format(y_index)

答案 1 :(得分:1)

如果循环没有执行,x_index永远不会被初始化。

我相信x_index是一个向量,所以试试这个:

x_index=[]
def scatter_x_y(self,filtered_data,x_parameter,y_parameter):
    for i in range(len(filtered_data)):
        if filtered_data[i].name==x_parameter:
            x=filtered_data[i]
            x_index=list(x.keys())
        elif filtered_data[i].name==y_parameter:
            y=filtered_data[i]
            y_index=list(y.keys())
    print x_index