名称错误:名称未定义;如果满足条件则定义的变量



我的代码结构如下:

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)

我试图通过类似于这里链接中给出的解决方案的行进行解析。在两个第一条件中,我将var1或var2附加到一些列表中,它可以正常工作。问题出在func((上。我得到了:NameError:未定义名称"var1">

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

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

def func(var1, var2):
# your code

在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)

您有两个问题:

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

试试这样的东西:

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)

最新更新