You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 07:39:04