Получение UnboundLocalError при выполнении программы

#python #pandas

#python #pandas

Вопрос:

Я пишу код для приложения на Python. До сих пор я писал это. Я получаю сообщение об ошибке в строке 68, т.е. shopping_list = shopping_list.append(temp_df, ignore_index=True). Сообщение об ошибке выдается сразу после кода. Мне нужно составить список, в который я добавляю все товары, добавленные в корзину.

 import sys

class Shopping:
    
    def add_item(self):
        items = int(input('Enter the number of items you want to send'))
        for i in range(0, items):
            print('Enter the details for the item')
            type_pack = input('Enter the type(letter or parcel):')
            weight = input('Enter the weight of the product: ')
            destination = input('Enter the destination of the product: ')
            zone = countries_zones.loc[countries_zones['Destination'] == destination.capitalize(), 'Zones'].iloc[0]
            zone1 = int(zone[-1])
            cost = 0
            if type_pack.lower() == 'parcel':
                if float(weight) < 3:
                    cost = parcel_by_sea_dataset[zone][parcel_by_sea_dataset.Weight == 'Over 2.5 kg up to 3kg'].iloc[0]
                    if cost == '-':
                        print("Sorry, no parcel services available for ", destination)
                    print('The cost of your stamp is', cost)

                elif 3 <= float(weight) < 5:
                    cost = parcel_by_sea_dataset[zone][parcel_by_sea_dataset.Weight == 'Up to 5kg'].iloc[0]
                    if cost == '-':
                        print("Sorry, no parcel services available for ", destination)
                    print('The cost of your stamp is', cost)

                elif 5 <= float(weight) < 10:
                    cost = parcel_by_sea_dataset[zone][parcel_by_sea_dataset.Weight == 'Up to 10kg'].iloc[0]
                    if cost == '-':
                        print("Sorry, no parcel services available for ", destination)
                    print('The cost of your stamp is', cost)

                elif 10 <= float(weight) < 15:
                    cost = parcel_by_sea_dataset[zone][parcel_by_sea_dataset.Weight == 'Up to 15kg'].iloc[0]
                    if cost == '-':
                        print("Sorry, no parcel services available for ", destination)
                    print('The cost of your stamp is', cost)

                elif 15 <= float(weight) < 20:
                    cost = parcel_by_sea_dataset[zone][parcel_by_sea_dataset.Weight == 'Up to 20kg'].iloc[0]
                    if cost == '-':
                        print("Sorry, no parcel services available for ", destination)
                    print('The cost of your stamp is', cost)

                else:
                    print("please enter a number between 0-20")
            print('Please chose the option below')
            print('1. Add to cart')
            print('2. Go back')
            selection = input('Enter your choice: ')
            if selection == '1':
                temp_df = pd.DataFrame({'Item Type': [type_pack],
                                        'Weight': [weight],
                                        'Destination': [destination],
                                        'Cost': [cost]})

                shopping_list = shopping_list.append(temp_df, ignore_index=True)
                print(shopping_list)

    def delete_item(self):
        pass

    def amend_item(self):
        pass

    def print_list(self):
        pass

    def print_receipt(self):
        pass


  
 Traceback (most recent call last):
  File "C:/Divyam Projects/oops1/stamp.py", line 114, in <module>
    mainMenu()
  File "C:/Divyam Projects/oops1/stamp.py", line 99, in mainMenu
    shopping.add_item()
  File "C:/Divyam Projects/oops1/stamp.py", line 68, in add_item
    shopping_list = shopping_list.append(temp_df, ignore_index=True)
UnboundLocalError: local variable 'shopping_list' referenced before assignment
  

Заранее благодарю вас за помощь. 🙂

Ответ №1:

Вы пытаетесь использовать список покупок и добавить к нему что-то, но он так и не был создан. попробуйте это:

 shopping_list = []
shopping_list.append(something,ignore_index=true)
  

вы можете объявить shopping_list над своим классом

Ответ №2:

Ошибка гласит:

 UnboundLocalError: local variable 'shopping_list' referenced before assignment
  

Это означает, что вы пытаетесь что-то сделать с переменной, которая еще не существует. Решение состоит в том, чтобы объявить его перед попыткой его использования, вероятно, непосредственно под строкой, в которой вы объявляете items в этой функции.

Возникнет другая проблема: .append() не имеет возвращаемого значения, поэтому shopping_list станет None , если вы присвоите ему возвращаемое значение .append() . Фактически, .append() изменяет список на месте; нет необходимости назначать что-либо при добавлении.

Разъяснение:

 # Incorrect
foo = []
foo.append('bar')
# foo is now None

# Correct
foo = []
foo.append('bar')
# foo is now ['bar']