Python报错UnboundLocalError:局部变量input赋值前被引用问题求助
错误原因排查
核心报错原因
你触发UnboundLocalError的根本原因是局部变量名覆盖了Python内置函数名:
input()是Python官方内置的标准输入函数,而你在main()函数内写了input = input("Enter 1 to accelerate , 2 to brake, ")这行代码,将input定义为了局部变量。- Python解释器执行函数前会先扫描整个函数作用域的所有变量声明,一旦检测到你定义了局部变量
input,就会将函数内所有对input的引用都指向这个局部变量,而非内置的input()函数。 - 你第19行第一次调用
input("Enter your cars current speed:")时,局部变量input还没有完成赋值,因此直接抛出引用前未赋值的错误。
其他需要修复的逻辑问题
你的代码还有多处逻辑错误会导致运行结果不符合预期:
input()返回值默认为字符串类型,你既没有将车速输入转为数值类型做加减运算,也没有将后续操作选项输入转为整数,input == 1、input == 2的判断永远不会成立。- 普通函数中不能使用
self关键字:self仅用于类的实例方法内部指代当前实例,main()函数里的三行self.__xxx = xxx代码完全多余,直接删除即可。 accelerate、brake方法逻辑不合理:加速、减速应该是在车辆当前自身速度的基础上调整,不需要额外传入speed参数,当前逻辑每次都会用外部传入的初始speed加减5,不符合功能预期。- 最终打印的是原始输入的车速,不是经过加速/刹车调整后的车速。
修复后的参考代码
class Car(): def __init__(self, model, make, speed): self.__model = model self.__make = make self.__speed = speed def accelerate(self): self.__speed += 5 def brake(self): self.__speed -= 5 def get_speed(self): return self.__speed def get_make(self): return self.__make def get_model(self): return self.__model def main(): # 输入时做类型转换,不要用input作为变量名 speed = int(input("Enter your cars current speed:")) make = input("Enter your cars make: ") model = input("Enter your cars model: ") op = int(input("Enter 1 to accelerate , 2 to brake: ")) car = Car(model, make, speed) if op == 1: car.accelerate() elif op == 2: car.brake() current_speed = car.get_speed() print("Your cars make is:", car.get_make()) print("Your cars model is:", car.get_model()) print("Your cars current speed:", current_speed) main()
内容的提问来源于stack exchange,提问作者Nevin Abraham
相关产品推荐
相关产品推荐

