当前位置: 首页 > 面试题库 >

Python-首次使用后重新分配局部变量时出现unbundLocalERROR

唐哲
2023-03-14
问题内容

以下代码可在Python 2.5和3.0中正常运行:

a, b, c = (1, 2, 3)

print(a, b, c)

def test():
    print(a)
    print(b)
    print(c)    # (A)
    #c+=1       # (B)
test()

但是,当我取消对行(B)的注释时,会得到一个unbundlocalerror:"c"未在行(A)处分配。a和b的值打印正确。这让我完全困惑,原因有二:

  1. 为什么由于行(B)的后面的语句而在行(A)抛出运行时错误?
  2. 为什么在按预期方式打印变量a并引发错误?bc

我能想到的唯一解释是,局部变量c是由赋值c+=1创建的,它甚至在创建局部变量之前就已经取代了“全局”变量c。当然,一个变量在它存在之前“偷走”范围是没有意义的。


问题答案:

Python对函数中的变量的处理方式不同,这取决于你是从函数内部还是外部为变量赋值。如果在函数中分配了变量,则默认情况下将其视为局部变量。因此,当你取消对行的注释时,你试图在为其html" target="_blank">赋值之前引用局部变量c。
如果你希望变量c引用在函数之前分配的全局c=3,请输入

global c

作为函数的第一行。

至于python 3,现在有

nonlocal c

可以用来引用最近的包含c变量的封闭函数范围。



 类似资料:
  • 问题内容: 以下代码给出了错误 我怎样才能解决这个问题?谢谢你的帮助! 问题答案: 你可以通过传递参数而不是依赖全局变量来解决此问题

  • 问题内容: 我想知道你们是否可以提供帮助。我试图做一个简单的视图,它将用户发送到客户端创建表单,但是我一直收到此错误: 赋值之前引用的局部变量“ form” 查看我的代码,看不到有什么问题。 有人告诉我我哪里出问题了吗? 问题答案: 这是正在发生的事情: 没有输入该块。 变量未定义。 然后,你尝试在语句中引用变量。 至于解决方法,这确实是你要决定的。解决的方法取决于你希望代码执行的操作(如果请求方

  • 问题内容: 我了解Python中局部变量和全局变量的概念,但是我只是有一个问题,为什么下面的代码中会出现错误?Python逐行执行代码,因此在读取第5行之前,它不知道a是局部变量。Python尝试执行第5行后,会回退一行并将其标记为错误吗? 问题答案: 设置和测试 为了分析您的问题,让我们创建两个独立的测试函数来复制您的问题: 版画。因此,调用此函数不是问题,而是在下一个函数上: 我们收到一个错误

  • 我在使用swagger codegen时遇到了一个问题。我已经从swaggerHub自动下载了swagger表单,然后,我使用swagger代码生成客户端。然而,对于POST请求,它需要ContentType作为参数。所以我在编译时收到一条消息: 变量内容类型已在方法验证地址中定义 庞。xml文件: swagger文件: 生成的Api类: 如何解决这个问题?谢谢!

  • 问题内容: 此代码为何起作用: 但这给出了“分配前引用的局部变量’var’”错误: 问题答案: 因为在第一个代码中,您已经创建了一个局部变量并使用了它的值,而在第二个代码中,您正在使用局部变量,而没有对其进行定义。 因此,如果要使第二个功能正常工作,则需要声明:- 在使用该功能之前。 而在此代码中: 更新 :- 但是,按照@Tim的注释,您不应在函数内部使用变量。最好在使用变量之前先定义变量,然后

  • 主要内容:Python局部变量,Python全局变量,获取指定作用域范围中的变量所谓 作用域(Scope),就是变量的有效范围,就是变量可以在哪个范围以内使用。有些变量可以在整段代码的任意位置使用,有些变量只能在函数内部使用,有些变量只能在 for 循环内部使用。 变量的作用域由变量的定义位置决定,在不同位置定义的变量,它的作用域是不一样的。本节我们只讲解两种变量, 局部变量和 全局变量。 Python局部变量 在函数内部定义的变量,它的作用域也仅限于函数内部,出了函数就不能