NameError:名称未定义;定义是否满足条件的变量

时间:2018-12-06 12:55:20

标签: python python-3.x error-handling

我的代码结构如下:

def collect_data(text):
    for line in text:
        key, match = parse_lines(line) #here I am parsing using a dict and regular expressions

        if key == something_1:
            var1 = match.group(1)
            list1.append(var1)

        elif key == something_2:
            var2 = match.group(2)
            list2.append(var2)

        elif key == something_3:
            func()

def func():
    for element in elements :
        if element == element1:
            variation = float(var1)
        elif element == element2:
            variation = float(var2)

         #here I append the variable variation to a list depending on the element name e.g. somelist.append(variation)
collect_data(text)

我正在尝试通过类似于此处link中给出的解决方案的行进行解析。 在两个第一个条件中,我将var1或var2附加到一些列表中,并且按预期方式工作。问题出在func()上。我正进入(状态: NameError:名称'var1'未定义

在我要解析的文本中,collect_data(text)中的前两个条件通常在第三个条件之前发生,但是我不认为这是我问题的本质。我只是不知道如何让Python看到一旦满足条件就会定义var1和var2。我希望解释足够清楚。也许使用一类是解决方案?有人有建议吗?

3 个答案:

答案 0 :(得分:0)

尝试将var1var2参数传递给func()。像这样:

def func(var1, var2):
    # your code

答案 1 :(得分:0)

您有两个问题:

  1. var1var 2是局部变量,因此您只能在collect_data函数中访问它们,而不能在func()中访问它们。您可以使用全局变量,或者必须将它们作为参数传递(针对您的情况,这是最佳解决方案),
  2. 如果要在最近的var 1中访问它们,则必须在var2语句之前创建ifelif

尝试这样的事情:

def collect_data(text):
    for line in text:
        key, match = parse_lines(line) #here I am parsing using a dict and regular expressions

        var1 = match.group(1)
        var2 = match.group(2)

        if key == something_1:
            list1.append(var1)

        elif key == something_2:
            list2.append(var2)

        elif key == something_3:
            func(var1, var2)

def func(var1, var2):
    for element in elements :
        if element == element1:
            variation = float(var1)
        elif element == element2:
            variation = float(var2)

         #here I append the variable variation to a list depending on the element name e.g. somelist.append(variation)
collect_data(text)

答案 2 :(得分:0)

在Python中,函数基本上只知道在函数内或在主代码中指定的变量。除非您将它们相互解析,否则它不会意识到其他函数中会发生什么。

def collect_data(text):
    for line in text:
        key, match = parse_lines(line) #here I am parsing using a dict and regular expressions

        if key == something_1:
            var1 = match.group(1)
            list1.append(var1)

        elif key == something_2:
            var2 = match.group(2)
            list2.append(var2)

        elif key == something_3:
            list3.append(func(a=var1, b=var2))

def func(a, b):
    for element in elements :
        if element == element1:
            variation = float(a)
        elif element == element2:
            variation = float(b)
    return variation


# here I append the variable variation to a list depending on the element name e.g. somelist.append(variation)
collect_data(text)