Python名称错误:名称未定义。

4

在运行这段 Python3 代码时,我遇到了名称未定义的错误:

def main():
    D = {} #create empty dictionary
    for x in open('wvtc_data.txt'):
        key, name, email, record = x.strip().split(':')
        key = int(key) #convert key from string to integer
        D[key] = {} #initialize key value with empty dictionary
        D[key]['name'] = name
        D[key]['email'] = email
        D[key]['record'] = record

print(D[106]['name'])
print(D[110]['email'])
main()

你能帮我解决这个问题吗?


你确定字典里填充了键值为106和110的数据吗? - Vaibhav Desai
1个回答

4

您的变量D是在函数main中局部的,因此代码外部无法访问它(即使在运行main之前您试图访问它)。您可以这样做:

def main():
    D = {} #create empty dictionary
    for x in open('wvtc_data.txt'):
        key, name, email, record = x.strip().split(':')
        key = int(key) #convert key from string to integer
        D[key] = {} #initialize key value with empty dictionary
        D[key]['name'] = name
        D[key]['email'] = email
        D[key]['record'] = record
    return D

D = main()
print(D[106]['name'])
print(D[110]['email'])

我怎样才能使变量D可用,以便其他在程序中创建的函数可以访问它? - user2405840
1
通过从函数中返回它,就像这里所看到的那样,并将其传递给需要它的其他函数。 - kindall
将其定义为全局变量,即在所有函数之外进行定义。这样它就可以在该模块的任何地方访问(如果您想在函数内部重新分配它,请使用 global)。 - fjarri
1
@Bogdan 我非常不同意那个建议。在Python中创建全局变量很少是最好的方法...传递变量会更清晰,并消除难以调试的作用域错误。 - SethMMorton
这不是建议,而是对他问题的回答。我同意大多数情况下拥有和尤其是改变全局变量是一种不好的做法,但我们不能真的假装在Python中不存在全局变量。编写混乱的代码是你必须经历的事情之一,直到你理解为什么它是糟糕的。 - fjarri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接