首页 > 解决方案 > “定义”和“分配”有什么区别?

问题描述

我感到困惑...

为什么他们有不同的错误?

还是喜欢 JavaScript?

print(val1) #NameError: name 'val1' is not defined
val1 = 20


def foo1():
    print(val2)  # NameError: name 'val2' is not defined
foo1()


def foo2():
    print(val3)  # UnboundLocalError: local variable 'val3' referenced before assignment
    val3 = 20
foo2()

标签: python

解决方案


因为最后一个对函数范围内的值进行了赋值,并且 python 检测到您在调用print.

在第二种情况下,python 找不到任何定义,在第一种情况下,当您在全局范围内分配一个值时,它无法解析该值是否为前一个值val(因为它不在本地范围内)。


推荐阅读