码迷,mamicode.com
首页 > 其他好文 > 详细

变量引用的错误:UnboundLocalError: local variable 'range' referenced before assignment

时间:2017-09-20 22:00:14      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:报错   elf   font   data   cal   sig   python   get_range   __init__   

 
 1 class Battery():
 2     """一次模拟电动汽车电瓶的简单尝试"""
 3     def __init__(self,battery_size=70):
 4         self.battery_size = battery_size
 5         # self.range =range
 6     def describe_battery(self):
 7         print(self.battery_size)
 8 
 9     def get_range(self):
10         print("battery_size是"+str(self.battery_size))
11         # range = 300
12         if self.battery_size == 80:
13                 range = 240
14         elif self.battery_size == 85:
15                 range = 270
16         # print("这里公布剩余里程"+str(rang))
17         message = "this car can go " + str(range)
18         print(message)

执行上述函数的时候,会报错 UnboundLocalError: local variable ‘range‘ referenced before assignment
意思是,还没在定义前就调用报错,怀疑是range作用域的问题
起初的想法是第一个解决办法,是把range的作用域变大,直接放大到class级别,在__init__中就声明,如下:
 def __init__(self,battery_size=70,range=200):
        self.battery_size = battery_size
        self.range =range

这样在调用的时候,就成功了,但疑问仍然存在,是作用域的原因,非要全局作用域吗

第二个解决办法的思路,案例中range的作用域在def范围内,但是为什么写在了if中,却没有实例化呢。if不会改变量的作用域,
除非是条件没有满足,未执行到初始化...事实确实如此
battery_size条件是80或者85,但是此时battery_size是70
条件都没有满足,所以就没有声明

解决办法:def 域内,if条件外声明变量range,比如这样
 def get_range(self):
        print("battery_size是"+str(self.battery_size))
        range = 300
        if self.battery_size == 80:
                range = 240
        elif self.battery_size == 85:
                range = 270
        # print("这里公布剩余里程"+str(rang))
        message = "this car can go " + str(range)
        print(message)
 

变量引用的错误:UnboundLocalError: local variable 'range' referenced before assignment

标签:报错   elf   font   data   cal   sig   python   get_range   __init__   

原文地址:http://www.cnblogs.com/kunpengv5/p/7565109.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!