Ich mache ein Programm, wo ich ein Inventar von Autos über ein Menü speichern und anzeigen. Allerdings halte ich den Fehler beim Empfang:UnboundLocalError: lokale Variable 'Autos' vor der Zuweisung referenziert
".py", line 24, in car_invent
cars = cars.Car(make, model, mileage, price, doors)
UnboundLocalError: local variable 'cars' referenced before assignment"
Ich habe bereits das Modul am Anfang eingeführt, und ich verstehe nicht, warum es mir diesen Fehler gibt
Meinen Code ist
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()
Hier ist auch das Modul als Referenz:
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
Okay, aber w hy wirft dies einen Fehler innerhalb einer Funktion, aber nicht im Modulbereich? Ich denke, es wird etwas mit 'func .__ code __. Co_varnames' zu tun haben, das den globalen Bereich überschattet? Nicht wirklich sicher über die Interna hier. –
Ja, es wird beschattet - eine gründlichere Erklärung [http://eli.thegreenplace.net/2011/05/15/understanding-unboundlocalerror-in-python). Ich fand den "dis" -Teil besonders aufschlussreich. –