关于python:UnboundLocalError:赋值前引用的局部变量’cars’

UnboundLocalError: local variable 'cars' referenced before assignment

我正在制作一个程序,通过菜单存储和显示汽车的库存。但是,我不断地收到错误:

1
2
3
".py", line 24, in car_invent
    cars = cars.Car(make, model, mileage, price, doors)
UnboundLocalError: local variable 'cars' referenced before assignment"

我已经从一开始就导入了这个模块,我不明白它为什么会给我这个错误。

我的代码是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import cars

def print_desc(item):
    print"Make:", item.get_make()
    print"Model:", item.get_model()
    print"Mileage:", item.get_mileage()
    print"Price:", item.get_price()

def car_invent():
    car_invent = []

    print"Enter data for the cars."

    num_cars = input("Enter number of cars:")

    for count in range(num_cars):
        make = raw_input("Enter the make:")
        model = input("Enter the year model:")
        mileage = input("Enter the mileage:")
        price = input("Enter the price:")
        doors = input("Enter the number of doors:")

        cars = cars.Car(make, model, mileage, price, doors)

        car_invent.append(cars)

    return car_invent

def truck_invent():
    truck_invent = []

    print"Enter data for the trucks."

    num_trucks = input("Enter number of trucks:")

    for count in range(num_trucks):
        make = raw_input("Enter the make:")
        model = input("Enter the year model:")
        mileage = input("Enter the mileage:")
        price = input("Enter the price:")
        drive_type = input("Enter the drive type:")

        trucks = cars.Truck(make, model, mileage, price, drive_type)

        truck_invent.append(truck)

    return truck_invent

def suv_invent():
    suv_invent = []

    print"Enter data for the cars."

    num_suv = input("Enter number of SUVs:")

    for count in range(1, num_suv):
        make = raw_input("Enter the make:")
        model = input("Enter the year model:")
        mileage = input("Enter the mileage:")
        price = input("Enter the price:")
        pass_cap = input("Enter passenger capacity:")

        suv = cars.SUV(make, model, mileage, price, pass_cap)

        suv_invent.append(suv)

    return suv_invent


def read_invent(car_invent, truck_invent, suv_invent):
    print"USED CAR INVENTORY"
    print"=================="
    print"The following car is in inventory."

    for item in car_invent:
        print_desc(item)
        print"Number of doors:", item.get_doors()

    print"The following pickup truck is in inventory."

    for item in truck_invent:
        print_desc(item)
        print"Drive type:", item.get_drive_type()


    print"The following SUV is in inventory."

    for item in suv_invent:
        print_desc(item)
        print"Passenger Capacity:", item.get_pass_cap()

def menu():
    print"MENU"
    print"====="
    print"1. Enter data for inventory"
    print"2. Display inventory"
    print"3. Quit"

def main():
    menu()

    choice = input("Enter choice:")
    while choice != 3:

        if choice == 1:
            cars = car_invent()
            trucks = truck_invent()
            suv = suv_invent()
            choice = input("Enter choice:")

        elif choice == 2:
            read_invent(cars, trucks, suv)
            choice = input("Enter choice:")

        else:
            print"Invalid choice"
            choice = input("Enter choice:")

main()

以下是供参考的模块:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
class Automobile:

    def __init__(self, make, model, mileage, price):
        self.__make = make
        self.__model = model
        self.__mileage = mileage
        self.__price = price

    def set_make(self, make):
        self.__make = make

    def set_model(self, model):
        self.__model = model

    def set_mileage(self, mileage):
        self.__mileage = mileage

    def set_price(self, price):
        self.__price = price

    def get_make(self):
        return self.__make
    def get_model(self):
        return self.__model

    def get_mileage(self):
        return self.__mileage
    def get_price(self):
        return self.__price

class Car(Automobile):
    def __init__(self, make, model, mileage, price, doors):
        Automobile.__init__(self, make, model, mileage, price)

        self.__doors = doors

    def set_doors(self, doors):
        self.__doors = doors

    def get_doors(self):
        return self.__doors

class Truck(Automobile):
    def __init__(self, make, model, mileage, price, drive_type):
        Automobile.__init__(self, make, model, mileage, price)

        self.__drive_type = drive_type

    def set_drive_type(self, drive_type):
        self.__drive_type = drive_type

    def get_drive_type(self):
        return self.__drive_type

class SUV(Automobile):
    def __init__(self, make, model, mileage, price, pass_cap):
        Automobile.__init__(self, make, model, mileage, price)

        self.__pass_cap = pass_cap

    def set_pass_cap(self, pass_cap):
        self.__pass_cap = pass_cap

    def get_pass_cap(self):
        return self.__pass_cap

1
cars = cars.Car(make, model, mileage, price, doors)
  • 声明一个名为cars的局部变量

  • 您将cars.Car(...)分配给cars

  • 但是cars是一个局部变量,它还没有值(未绑定的局部变量)。

  • 你的程序死机了