标签:报错 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