Python unboundLocalError-变量是字典中的键
一切都会找到的,但现在我发现了错误Python unboundLocalError-变量是字典中的键,python,python-2.7,Python,Python 2.7,一切都会找到的,但现在我发现了错误 if gchild == 'endorsements': ecert = var.student_info[child][gchild] l = list() for subj in ecert: if ecert[subj]['courseendorsementresult'] != 'NO': result = ecert[subj]['courseendorsementresult']
if gchild == 'endorsements':
ecert = var.student_info[child][gchild]
l = list()
for subj in ecert:
if ecert[subj]['courseendorsementresult'] != 'NO':
result = ecert[subj]['courseendorsementresult']
l.append([subj,result])
achievements[student]['endorsements'] = l
奇怪的是,到目前为止,我一直在引用“学生”这个词
我没有名为student的全局变量
我真的很困惑,我以为这些错误是在全局变量和局部变量之间存在混淆时发生的,但是“学生”变量只是局部变量
任何帮助都将不胜感激。我想
gchild==“背书”
和gchild==“localidentifier”
是独占的-因此不会出现两个代码块都将运行的情况。如果gchild='localidentifier':块,则只在中为学生
赋值,因此,如果第一个gchild
值是“背书”
,将不会填充学生
,最终会出现未绑定的LocalError
我不知道您的代码的细节,但我猜您可能希望使用类似于firstif
块的值填充student
var,如下所示:
File "/Users/Teacher/Documents/Python/Standards/Data_Manipulation_3/data_man.py", line 454, in create_school
achievements[student]['endorsements'] = l
UnboundLocalError: local variable 'student' referenced before assignment
或者您可以使用ecert
变量,该变量的值似乎与student
的值相同:
student = var.student_info[child][gchild]
如果gchild='localidentifier'
,则在前面有的块中创建变量student
。如果执行该块,变量student
将可用。但是,如果前面有if gchild=='endorsements'
的块在另一个块之前执行(因为gchild=='endorsements'
在比gchild=='localidentifier'
更早的迭代中),那么变量student
将不会被创建。正如您在以下条件下定义的student
:
if gchild == 'endorsements':
ecert = var.student_info[child][gchild]
l = list()
for subj in ecert:
if ecert[subj]['courseendorsementresult'] != 'NO':
result = ecert[subj]['courseendorsementresult']
l.append([subj,result])
achievements[ecert]['endorsements'] = l
因此,在你的第二句话中,如果gchild=='背书':
你不定义学生
。因为你的条件都是检查gchild的值,如果一个发生了,另一个没有发生!所以你有两个选择
在新语句中也定义学生
若可能的话,在所有条件的顶部定义它李>
是的,这就是原因,回头看。当迭代gchild时,“证书”和“其他成就”排在“localidentifier”之后,但背书排在前面,因此学生尚未创建。谢谢
if gchild == 'endorsements':
ecert = var.student_info[child][gchild]
l = list()
for subj in ecert:
if ecert[subj]['courseendorsementresult'] != 'NO':
result = ecert[subj]['courseendorsementresult']
l.append([subj,result])
achievements[ecert]['endorsements'] = l
if gchild == 'localidentifier':
student = var.student_info[child][gchild]