UnboundLocalError:嵌套块中的过早变量赋值
使用嵌套函数作用域时,如提供的代码中所示,Python 可能会遇到错误消息“UnboundLocalError:赋值之前引用了局部变量‘c’。”当在初始化之前引用嵌套块中分配的变量时,会发生此错误。
在示例代码中:
a, b, c = (1, 2, 3) def test(): print(a) print(b) c += 1 # UnboundLocalError here
代码尝试打印变量 a、b 和c 在函数 test() 中。虽然 a 和 b 是全局变量并且可以直接访问,但 c 存在于函数的局部范围内。结果,赋值 c = 1 创建了一个局部变量 c,它覆盖了同名的全局变量。
代码执行时,Python 初始化 a 和 b 并继续调用 test()。在 test() 中,它成功打印 a 和 b,但在给局部变量 c 赋值之前尝试打印它,从而导致错误。
要解决此问题,必须显式声明该变量在分配任何值之前使用 global 关键字作为函数内的全局。这通知 Python 使用全局变量而不是创建本地变量。更正后的代码为:
a, b, c = (1, 2, 3) def test(): global c # Declare 'c' as global print(a) print(b) c += 1
或者,在 Python 3 中,可以使用 nonlocal 关键字,它指的是具有同名变量的最近的封闭函数作用域。这允许修改在外部函数中声明的非全局变量。使用非本地更新的代码将是:
a, b, c = (1, 2, 3) def test(): nonlocal c print(a) print(b) c += 1
以上是为什么 Python 在嵌套函数中抛出'UnboundLocalError”,以及如何解决?的详细内容。更多信息请关注PHP中文网其他相关文章!