NameError:名称未定义;满足条件时定义的变量
Posted
技术标签:
【中文标题】NameError:名称未定义;满足条件时定义的变量【英文标题】:NameError: name is not defined; a variable defined if a conditon is met 【发布时间】:2019-05-08 04:22:58 【问题描述】:我的代码结构如下:
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: name 'var1' is not defined。
在我正在解析的文本中,collect_data(text) 中的前两个条件通常出现在第三个条件之前,但我认为这不是我的问题的本质。我只是不知道如何让 Python 看到一旦满足条件,就会(将)定义 var1 和 var2。我希望解释足够清楚。也许使用类将是一个解决方案?有人有什么建议吗?
【问题讨论】:
【参考方案1】:你有两个问题:
var1
和var 2
是局部变量,所以你只能在你的collect_data
函数中访问它们,你不能在func()
中访问它们。您可以使用全局变量,也可以将它们作为参数传递(在您的情况下是最佳解决方案),
如果您希望在最后一个elif
中可以访问它们,则必须在您的if
语句之前创建var 1
和var2
:
试试这样的:
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】:在 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)
【讨论】:
【参考方案3】:尝试将var1
和var2
参数传递给func()
。像这样:
def func(var1, var2):
# your code
【讨论】:
以上是关于NameError:名称未定义;满足条件时定义的变量的主要内容,如果未能解决你的问题,请参考以下文章
使用 dict 理解时的问题。 NameError:未定义全局名称
NameError:名称'plot_confusion_matrix'未定义