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的更多相关文章

  1. UnboundLocalError: local variable 'range' referenced before assignment

    1. 报错信息 UnboundLocalError: local variable 'range' referenced before assignment 2. 代码 class Car(): &q ...

  2. 洗礼灵魂,修炼python(23)--自定义函数(4)—闭包进阶问题—>报错UnboundLocalError: local variable 'x' referenced before assignment

    闭包(lexical closure) 什么是闭包前面已经说过了,但是由于遗留问题,所以单独作为一个章节详解讲解下 不多说,看例子: def funx(x): def funy(y): return ...

  3. _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 ...

  4. 出现UnboundLocalError: local variable 'a' referenced before assignment异常的情况与解决方法

    出现UnboundLocalError: local variable ‘a’ referenced before assignment异常的情况与解决方法字面意思:局部变量赋值前被引用原因:局部变量 ...

  5. 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 ...

  6. UnboundLocalError: local variable 'foo' referenced before assignment Python常见错误

    在定义局部变量前在函数中使用局部变量(此时有与局部变量同名的全局变量存在) 在函数中使用局部变来那个而同时又存在同名全局变量时是很复杂的, 使用规则:如果在函数中定义了任何东西,如果它只是在函数中使用 ...

  7. 全局变量报错:UnboundLocalError: local variable 'l' referenced before assignment

    总结: 内部函数,不修改全局变量可以访问全局变量 内部函数,修改同名全局变量,则python会认为它是一个局部变量 在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbou ...

  8. python:UnboundLocalError: local variable 'xxx' referenced before assignment

    近来一直都在学习python语言,偶然在伯乐在线看到2017年京东C/C++的面试题.就打算用python+ST3 IDE顺便敲下面试题代码. 原题 C语言: #include <stdio.h ...

  9. UnboundLocalError: local variable ‘xxx‘ referenced before assignment

    原因 在Python函数中调用了某个和全局变量同名的局部变量,导致编译器不知道此时使用的是全局变量还是局部变量 a = 3 def func(): a+=3 func() UnboundLocalEr ...

随机推荐

  1. 分支结构,for循环,while循环,跳出循环

    #流程控制 概念:通过规定的语句让程序代码有条件的按照一定的方 式执行 顺序结构 按照书写顺序来执行,是程序中最基本的流程结构 选择结构(分支结构.条件结构) 分支结构 单路分支:if(执行的条件){ ...

  2. Java虚拟机详解(十一)------双亲委派模型

    在上一篇博客,我们介绍了类加载过程,包括5个阶段,分别是“加载”,“验证”,“准备”,“解析”,“初始化”,如下图所示: 本篇博客,我们来介绍Java虚拟机的双亲委派模型,在介绍之前,我先抛出一个问题 ...

  3. 阿里云函数计算 .NET Core 初体验

    体验了一波阿里云函数计算, 已支持 .NET Core 2.1, 那么按照惯例, 来写个 "Hello World" 吧. 作者注: 开发环境 Windows 10 & V ...

  4. Python 处理Excel内的数据(案例介绍*2)

    (一)案例一介绍 现在有一匹电商产品跟当日销量的数据,如下,总共有上万笔的数据,现在需要统计每个品牌当日的销售量,比如美宝莲今天总共卖出了多少的商品,另外需要统计每个品牌下面的每个子品类当日销售量(品 ...

  5. C++ | C++ 基础知识 | 指针、数组与引用

    1.指针 在 C++ 语言中存放及使用内存地址是通过指针和引用完成的. char c = 'a'; // 声明 c 变量,c 变量存储的是 'a' 的值. char* p = &c; // 声 ...

  6. acmPush模块示例demo

    感谢论坛版主 马浩川 的分享. 模块介绍:  阿里移动推送(Alibaba Cloud Mobile Push)是基于大数据的移动智能推送服务,帮助App快速集成移动推送的功能,在实现高效.精确.实时 ...

  7. 华为,小米部分机型微信浏览器rem不适配的解决方案

    针对近日华为,小米的部分机型,在升级系统或升级微信之后,微信内置浏览器产生的rem不能正确填充满的问题,有如下解决方案 目前来看,产生这个情况的原因是因为给html附font-size时,附上的fon ...

  8. nginx介绍与安装

    1.nginx作用可以配置数十个场景 ​ ​ 2.环境安装 环境确认 ​ 安装环境 yum -y install gcc gcc-c++ autoconf pcre-devel make automa ...

  9. Windows10内嵌Ubuntu子系统配置python开发环境

    Windows10内嵌Ubuntu子系统配置python开发环境 安装pycharm. 到intellij idea网站下载Linux环境下载免费的pycharm,通过ubuntu子系统内部的/mnt ...

  10. python 注册登录(文件操作)

    name = input("请注册用户:") password = input("请注册密码:") with open(file="user" ...