Python错误:UnboundLocalError: local variable ‘total’ referenced before assignment解决办法[通俗易懂]

Python错误:UnboundLocalError: local variable ‘total’ referenced before assignment解决办法[通俗易懂]1.错误概述今天练习类似于如下代码的时候遇到了一个UnboundLocalError错误,该错误的内容翻译过来就是:局部变量total没有定义就使用了。total=10defchange(): total=total+1 print(total)change()D:\>pythontest.pyTraceback(mostrecentcall…

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

1.错误概述

今天练习类似于如下代码的时候遇到了一个UnboundLocalError错误,该错误的内容翻译过来就是:局部变量total没有定义就使用了。

total = 10
def change():
	total = total + 1
	print(total)
change()
D:\>python test.py
Traceback (most recent call last):
  File "test.py", line 5, in <module>
    change()
  File "test.py", line 3, in change
    total = total + 1
UnboundLocalError: local variable 'total' referenced before assignment

2.原因分析

如果在一个范围内,对一个变量进行赋值,那么这个变量就会被认为是局部变量,就像在change()这个函数范围之内,我们对total这个变量进行了重新赋值:total=total+1,那么编译器就会认为total这个变量是一个局部变量,而这个赋值表达式实际上是从右向左进行的,也就是说,在进行total+1运算的时候,total并没有被定义,所以就爆出了这个UnboundLocalError错误。

3.解决办法

在对total进行赋值之前,先用global关键字将total变成一个全局变量,这样设置之后,编译器就会看到total已经在函数之外定义过了,所以就不会报错。代码如下:

total = 10
def change():
        global total
	total = total + 1
	print(total)
change()

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 给ocx进行签名

    给ocx进行签名

    2022年7月13日
    15
  • 两种方式创建SqlSessionFactory[通俗易懂]

    两种方式创建SqlSessionFactory[通俗易懂]前提:已经完成了MyBatis环境的搭建!!!一、使用配置文件创建SqlSessionFactory开始Code了:packagecom.littlestar.util;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache…

    2022年6月6日
    84
  • stun信令「建议收藏」

    stun信令「建议收藏」#1.简介stun协议本身是用来进行NAT穿透使用,其本身实际上是NAT内部设备获取外部IP地址的一种协议。STUN协议在RFC上目前经过三种演变,其中RFC3489上定义的STUN和之后的RFC5389和8489上定义的stun在概念上存在明显区分:RFC3489定义:SimpleTraversalofUserDatagramProtocol(UDP)ThroughNetworkAddressTranslators(NATs)(STUN)RFC5389和RFC8489:Se

    2022年7月17日
    22
  • mfc窗口置顶_mfc treecontrol

    mfc窗口置顶_mfc treecontrol版权声明:www.gudianxiaoshuo.com原创文章版权–古典小说网         WM_CONTEXTMENU消息用来响应鼠标右键消息,它响应的不是鼠标右键按下消息,也不是鼠标右键弹起消息而是鼠标右键依次按下弹起后触发的消息。          因此,若程序还响应了鼠标右键按下的消息OnRButtonDown,且在此响应函数中有模特对话

    2022年10月17日
    3
  • QT(C++)面试总结

    QT(C++)面试总结参考博客QT信号槽机制的优缺点(1)问题:为什么Qt使用信号与槽机制而不是传统的回调函数机制进行对象间的通信呢?回调函数的本质是“你想让别人的代码执行你的代码,而别人的代码你又不能动”这种需求下产生的。回调函数是函数指针的一种用法,如果多个类都关注某个类的状态变化,此时需要维护一个列表,以存放多个回调函数的地址。对于每一个被关注的类,都需要做类似的工作,因此这种做法效率低,不灵活。(2)解决办法Qt使用信号与槽机制来解决这个问题,程序员只需要指定一个类含有哪些信号函数、哪些槽函数,Qt会处理信

    2022年6月25日
    24
  • Ubuntu安装jdk1.8

    Ubuntu安装jdk1.8Ubuntu安装jdk1.8一.源码包1.Ubuntu游览器输入http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html。2.考虑到虚拟机的网速,可以在物理机下载源码包,通过xftp工具将源码包传到Ubuntu。二、解压1.在/usr/local目录下新建java文件夹命令:sudomkdir/usr/local/java2.解压命令:sudotar-zxvfjdk-8u2

    2022年7月12日
    16

发表回复

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

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