unboundlocalerror python_Python问题:UnboundLocalError: local variable ‘xxx’ referenced before assignme…「建议收藏」

unboundlocalerror python_Python问题:UnboundLocalError: local variable ‘xxx’ referenced before assignme…「建议收藏」参考链接:【解析】UnboundLocalError:localvariable’xxx’referencedbeforeassignment在函数外部已经定义了变量n,在函数内部对该变量进行运算,运行时会遇到了这样的错误:主要是因为没有让解释器清楚变量是全局变量还是局部变量。【案例】如下代码片所示:deftest():ifvalue==1:a+=1returnavalue=…

大家好,又见面了,我是你们的朋友全栈君。

参考链接:

【解析】

UnboundLocalError: local variable ‘xxx’ referenced before assignment

在函数外部已经定义了变量n,在函数内部对该变量进行运算,运行时会遇到了这样的错误:

主要是因为没有让解释器清楚变量是全局变量还是局部变量。

【案例】

如下代码片所示:

deftest():if value == 1:

a+= 1

returna

value= a = 1b= test()

结果运行时就出现了上述错误。

这是因为在函数内部对变量赋值进行修改后,该变量就会被Python解释器认为是局部变量而非全局变量,当程序执行到a+=1的时候,因为这条语句是给a赋值,所以a成为了局部变量,那么在执行return a(或是print a)的时候,因为a这个局部变量还没有定义,自然就会抛出这样的错误。

那么问题就来了,出现这个问题我们就要考虑程序是按照全局变量,就是经过函数运算到函数外面还生效,还是按照局部变量在函数外生效。

第一种,当全局变量来看,就是使用global关键字,在函数内部先声明a这个变量是全局变量。代码如下:

deftest():globalaif value == 1:

a+= 1

returna

value= a = 1b= test()

这时,n就成为了全局变量,在函数内部修改该变量,也就没有问题了。

这种情况外面的a执行完函数是2,而函数返回的也是2。

第二种是当局部变量。就是这个变量只在函数内使用,那么只要在函数内把这个变量定义一下就行了

deftest():

a= 1

if value == 1:

a+= 1

returna

value= a = 1b= test()

这种情况外面的a执行完函数还是1,而函数返回的则是2。

然而我还发现一个问题,理论上python中list作为全局变量无需global声明,因为像b[0] = 2这种赋值不会有歧义。它是“明确的”,因为如果把b当作是局部变量的话,它会报KeyError,所以它只能是引用全局的b,故不需要多此一举显式声明global。

但是我在实际操作中,在函数外定义列表,在函数中多次添加值,而后在return打印出来。执行次数少没有问题,随着循环次数的增加会出现,此报错,报错信息如下:

Traceback (most recent call last):

File “C:/Users/xxxxxx/Desktop/工具/get_url2.py”, line 153, in

r_get_url_list,script_list,html_list,other_list,suffix_list = please_geturl(url,s_url)

File “C:/Users/xxxxxx/Desktop/工具/get_url2.py”, line 93, in please_geturl

if get_url_list: # 非空列表

UnboundLocalError: local variable ‘get_url_list’ referenced before assignment

这种情况困扰我很久,一直找不出问题,最后我定义了新的列表来装返回值,程序暂时不出问题了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149466.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月24日 下午9:16
下一篇 2022年6月24日 下午9:36


相关推荐

  • PHP之Memcache和Memcached

    PHP之Memcache和Memcached

    2022年2月8日
    37
  • py3使用py3Fdfs

    py3使用py3Fdfs通过 pip 下载的 fdfs client py 只适用于 python2 版本 所以要想适用于 python3 版本 需要用 pip3installp 但是下载包之后 运行上传文件 会报错 TypeError typeobjectar notstr 要求 Fdfs client 必须传入一个 tracker 字典此

    2026年3月26日
    2
  • mac电脑如何快速显示桌面及切换应用「建议收藏」

    mac电脑如何快速显示桌面及切换应用

    2022年2月9日
    168
  • Manus的多Agent架构怎么做?

    Manus的多Agent架构怎么做?

    2026年3月15日
    3
  • 数据库习题及答案5

    数据库习题及答案5模拟测验1一、1 2 3 4 5 6 7 8 9 10A D C c D A C A A C一、选择题(在每个小题四个备选答案中选出一个正确答案,填在题末的括号中)(本大题共10小题,每小题2分,总计20分)()是位于用户与操作系统之间的一层数据管理软件,它属于系统软件,它为用户或应用程序提供访问数据库的方法。数据库在建立、使用和维护时由其统一管理、统一控制。A.DBMSB.DBC.DBSD.DBA下列四项中,不属于SQL2005实用程序的是()。A.对象资源管理器B.查询分析.

    2025年6月9日
    7
  • 考研数据库系统概论题目整理总结_数据库系统概论pdf

    考研数据库系统概论题目整理总结_数据库系统概论pdf数据库系统概论题目自整理说复试题目过于牵强,只是自己整理的一些知识点而已,为了便于理解和背诵,有些部分定义和说明尽量简明扼要,如有错误请多多指教!(不可转载)1.试述数据、数据库、数据库系统、数据库管理系统的概念。(l)数据(Data):描述事物的符号记录称为数据。数据的含义称为语义,数据与其语义是不可分的。(2)数据库(DataBase,简称DB):若干个相互之间有关联关系的表的集合,表就是关系。数据库中的数据具有永久存储,易扩展,可共享的特点。(3)数据库系统(Data

    2025年11月30日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号