2016-05-15 5 views
0

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 

Antwort

1
cars = cars.Car(make, model, mileage, price, doors) 
  1. Sie deklarieren eine lokale Variable namens cars

  2. Sie ordnen cars.Car(...) zu cars

  3. Aber cars eine lokale Variable ist, die keinen Wert noch hat (ungebundene local)

  4. Ihr Programm stürzt ab

+0

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. –

+0

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. –

Verwandte Themen