变量引用的错误:UnboundLocalError: local variable 'range' referenced before assignment
class Battery():
"""一次模拟电瓶汽车的简单尝试"""
def __init__(self,battery_size = 60):
"""初始化电瓶的属性"""
self.battery_size = battery_size def describe_battery(self):
"""打印一条描述电瓶容量的信息"""
print("This car has a " + str(self.battery_size) + "kWH battery.") def get_range(self):
"""打印一条描述电瓶续航的消息""" if self.battery_size == 70:
range = 240
elif self.battery_size == 85:
range = 270 message = "This car can go approximately " + str(range)
message += "miles on a full charge."
print(message)
进行代码运行时,会提示“UnboundLocalError: local variable 'range' referenced before assignment”错误。
意思是局部变量错误:局部变量‘range’在引用前赋值。
我们看到在class Battery()这个类下,battery_size的属性被赋值为60
然后在get_range()函数中,做了一个条件判断,如果battery_size等于70或者85 后将range赋值。并打印出对应信息。
可事实是,battery_size已经被提前赋值,不会改变,所以条件判断不成立,从而引发错误。
可以将代码改的灵活一点:
使用input交互,让选择指定的数,然后将选择的battery size后,对range赋值不同的值。
class Battery():
"""一次模拟电瓶汽车的简单尝试"""
def __init__(self,battery_size = 60):
"""初始化电瓶的属性""" battery_size = int(input("Please input battery size,60&70&85?:"))
self.battery_size = battery_size
def get_range(self):
"""打印一条描述电瓶续航的消息""" if self.battery_size == 60:
range = 240
elif self.battery_size == 70:
range = 270
else:
range = 350
但是这样的代码还是存在问题,比如我输入指定3个数以外还是会报错。
其实一开始的第一个想法是将range添加到作用域中:
class Battery():
"""一次模拟电瓶汽车的简单尝试"""
def __init__(self,battery_size = 60,range = 200):
"""初始化电瓶的属性""" #battery_size = int(input("Please input battery size,60&70&85?:"))
self.battery_size = battery_size
self.range = range
但是执行代码仍然有错,报错和之前一致,局部变量已被赋值。
message = "This car can go approximately " + str(range)
UnboundLocalError: local variable 'range' referenced before assignment
那么说明属性range并没有在实例中发挥作用。if条件语句也不会改变range的值,因为判断的条件不满足。
开始思路2:
将range定义一个变量,并在作为局部变量放在get_range函数。这样运行是没有问题,但是,里程数只根据range的变量值改变,那么if条件语句也就失去了意义。
def describe_battery(self):
"""打印一条描述电瓶容量的信息"""
print("This car has a " + str(self.battery_size) + "kWH battery.") def get_range(self):
"""打印一条描述电瓶续航的消息""" range = 152 if self.battery_size == 50:
range = 240
elif self.battery_size == 70:
range = 270 message = "This car can go approximately " + str(range)
message += "miles on a full charge."
print(message)
后续的思路是,让用户给出battery_size的值,根据这个值,计算能够运行的里程数。
假设50kWH可以跑240miles(1miles = 1 609米),那么约为386KM,那么1kWH可以跑7KM,来试试怎么写?
变量引用的错误:UnboundLocalError: local variable 'range' referenced before assignment的更多相关文章
- UnboundLocalError: local variable 'range' referenced before assignment
1. 报错信息 UnboundLocalError: local variable 'range' referenced before assignment 2. 代码 class Car(): &q ...
- 洗礼灵魂,修炼python(23)--自定义函数(4)—闭包进阶问题—>报错UnboundLocalError: local variable 'x' referenced before assignment
闭包(lexical closure) 什么是闭包前面已经说过了,但是由于遗留问题,所以单独作为一个章节详解讲解下 不多说,看例子: def funx(x): def funy(y): return ...
- _markupbase.py if not match: UnboundLocalError: local variable 'match' referenced before assignment,分析Python 库 html.parser 中存在的一个解析BUG
BUG触发时的完整报错内容(本地无关路径用已经用 **** 隐去): **************\lib\site-packages\bs4\builder\_htmlparser.py:78: U ...
- 出现UnboundLocalError: local variable 'a' referenced before assignment异常的情况与解决方法
出现UnboundLocalError: local variable ‘a’ referenced before assignment异常的情况与解决方法字面意思:局部变量赋值前被引用原因:局部变量 ...
- RDO Stack Exception: UnboundLocalError: local variable 'logFile' referenced before assignment
Issue: When you install RDO stack on CentOS, you may encounter following error. Error: [root@localho ...
- UnboundLocalError: local variable 'foo' referenced before assignment Python常见错误
在定义局部变量前在函数中使用局部变量(此时有与局部变量同名的全局变量存在) 在函数中使用局部变来那个而同时又存在同名全局变量时是很复杂的, 使用规则:如果在函数中定义了任何东西,如果它只是在函数中使用 ...
- 全局变量报错:UnboundLocalError: local variable 'l' referenced before assignment
总结: 内部函数,不修改全局变量可以访问全局变量 内部函数,修改同名全局变量,则python会认为它是一个局部变量 在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbou ...
- python:UnboundLocalError: local variable 'xxx' referenced before assignment
近来一直都在学习python语言,偶然在伯乐在线看到2017年京东C/C++的面试题.就打算用python+ST3 IDE顺便敲下面试题代码. 原题 C语言: #include <stdio.h ...
- UnboundLocalError: local variable ‘xxx‘ referenced before assignment
原因 在Python函数中调用了某个和全局变量同名的局部变量,导致编译器不知道此时使用的是全局变量还是局部变量 a = 3 def func(): a+=3 func() UnboundLocalEr ...
随机推荐
- 浅谈Linux下/etc/passwd文件
浅谈Linux 下/etc/passwd文件 看过了很多渗透测试的文章,发现在很多文章中都会有/etc/passwd这个文件,那么,这个文件中到底有些什么内容呢?下面我们来详细的介绍一下. 在Linu ...
- Linux学习之路--常用配置
1.修改IP地址 $vi /etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTO=staticONBOOT=yesIPADDR=192.168.2.12 ...
- 「洛谷P1080」「NOIP2012提高组」国王游戏 解题报告
P1080 国王游戏 题目描述 恰逢 \(H\)国国庆,国王邀请\(n\)位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 \( ...
- 无聊读论文:视觉注意力模型RARE2012
Riche, N., Mancas, M., Duvinage, M., Mibulumukini, M., Gosselin, B., & Dutoit, T. (2013). RARE20 ...
- 大白话带你梳理一下Dubbo的那些事儿
首先声明,本文并不是什么代码实战类型的文章,适合于想对dubbo有更加全面认识的读者阅读,文章不会过于深奥,只是将一系列的知识点串通起来,帮助读者温故而知新. RPC服务的介绍 相信有过一些分布式开发 ...
- iSO垂直滑动条VerticalSlider
由于项目需要实现一个垂直的Slider,滑动条使用UIlabel实现,按钮使用UIButton,按钮可以设置背景图片,代码如下 VerticalSlider.h // // VerticalSlide ...
- 【转】SQL语句面试题
1.一道SQL语句面试题,关于group by表内容:2005-05-09 胜2005-05-09 胜2005-05-09 负2005-05-09 负2005-05-10 胜2005-05-10 负2 ...
- OpenGL ES for Android
经过半年的准备OpenGL ES for Android系列文章终于要和大家见面了,在这里定一个小目标-先吸引1000个粉丝,万一实现了呢.写关于OpenGL ES的文章开始是有一些犹豫的,因为Ope ...
- spring boot 集成apollo 快速指南
目前市面上流行的三大配置中心框架:Spring CLoud Config .Alibaba Nacos 以及携程apollo, 我们相应架构组号召,就使用Apollo吧. Work Flow 简单解释 ...
- MOS 常用链接地址
主页面类 Exadata主页面 Exadata Database Machine and Exadata Storage Server Supported Versions (Doc ID 8888 ...