首页 > 后端开发 > Python教程 > 为什么 Python 在嵌套函数中抛出'UnboundLocalError”,以及如何解决?

为什么 Python 在嵌套函数中抛出'UnboundLocalError”,以及如何解决?

Patricia Arquette
发布: 2024-12-23 08:20:22
原创
727 人浏览过

Why Does Python Throw an `UnboundLocalError` in Nested Functions, and How Can It Be Resolved?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板