變量引用的錯誤:UnboundLocalError: local variable 'range' referenced before assignment


 
 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)
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM