我不知道为什么我会看到UnboundLocalError
:
def spam():
print(eggs)
eggs = 'spam local'
eggs = 'global'
spam()
任何人都可以解释原因吗?
答案 0 :(得分:2)
您使用eggs
将eggs = 'spam local'
重新绑定到本地范围是触发此事的原因。
Python认为由于该分配,eggs
将在本地范围内,当它在调用eggs
期间看起来print
时,它会抱怨它正在尝试引用变量(eggs
)在执行分配之前(打印后的行)。
一般情况下,我没有看到任何需要您尝试做的事情,无论哪种方式,您都可以通过使用global
向Python表明您将要改变它来使其工作全局范围内的名称:
def spam():
global eggs
print(eggs)
eggs = 'spam local'
或者,将值作为参数传递,这不会全局更改值,但会使其在本地可用以修复在第一次打印调用期间无法找到的引用:
def spam(eggs=eggs):
print(eggs)
eggs = 'spam local'
这两种方法当然有不同的语义:
eggs
作为参数在本地范围内可用,eggs
的全局值作为其默认值附加。现在eggs
中print
的查找工作正常,而eggs = 'spam local'
将改变位于本地范围内的eggs
。您可以根据您尝试的内容进行选择。