Не уверен, что здесь не так, независимо от того, что я пытаюсь, он возвращает ошибку типа: объект ‘NoneType’ не может быть повторен

#python #nested-lists

Вопрос:

Задание требует, чтобы я сохранил новые значения в списке, а затем обновил список списков с их помощью. Программа, кажется, работает нормально, пока я не вызову «ежемесячно» после вызова «редактировать». Я предполагаю, что моя проблема где-то в функции «редактировать», но на всякий случай, если я дурак, я включил весь свой код.

Функции и основной метод находятся в отдельных файлах

 def Monthly(mSales):
    for row in mSales:
        print(row[0]   ' - '   row[1])
    print()    

def Yearly(mSales):
    total = sum(int(monthlySales) for _, monthlySales in mSales)
    average = total/ len(mSales)
    print("Yearly Total:       ",total)
    print("Monthly Average:    ",round(average, 2))
    print()

def Edit(mSales):
    editMonth = input("Three-letter Month: ")
    #index = 0
    months = ['Jan','Feb','Mar','Apr',
              'Jun','Jul','Aug','Sep',
              'Oct','Nov','Dec']
    if editMonth not in months:
        print("Invalid three-letter month.")
        print()
        return
    new_sales = input("Sales Amount: ")
    #index = months.index(month)
    #print(index)
    new_list = [editMonth, str(new_sales)]
    #mSales[index][1] = new_list
    for i in range(len(mSales)):
        if mSales[i][0] == editMonth:
            mSales[i] = new_list
            break
     
    print("Sales amount for {} was modified".format(editMonth))
    print()

import ch06_Monthly_Sales_commandFunctions_CJR as Func

def main():
    #initialize monthly sales list of lists
    monthlySales = [['Jan','616'],['Feb','466'],['Mar','796'], 
                    ['Apr','238'],['May','310'],['Jun','726'], 
                    ['Jul','987'],['Aug','604'],['Sep','951'], 
                    ['Oct','958'],['Nov','238'],['Dec','610']]
    print("Monthly Sales program")
    print("")
    print("COMMAND MENU")
    print("monthly - View monthly sales")
    print("yearly  - View yearly summary")
    print("edit    - Edit sales for a month")
    print("exit    - Exit program")
    print(" ")

    while True:
        command = input("Command: ")
        #if statements correlating to command functions
        if command == 'exit':
            print("Bye!")
            break 
        elif command == 'monthly':
            Func.Monthly(monthlySales)
        elif command == 'yearly':
            Func.Yearly(monthlySales)
        elif command == 'edit':
            monthlySales = Func.Edit(monthlySales)
        elif command != 'exit' or 'monthly' or 'yearly' or 'edit':
            print("Invalid command.")
 

Комментарии:

1. Похоже 'May' , что вы пропустили свой список месяцев в Edit (в году 12 месяцев, а не 11). Это было намеренно?

2. Вы знаете об ошибке, но какая строка ее вызывает? Это помогает диагностировать, когда дается полная обратная связь.

3. Нет, опустить «май», конечно, не было намеренным. Спасибо за отзыв, я включу более подробную информацию в следующий раз.

Ответ №1:

Вы ничего не возвращаете Edit , и этот None результат присваивается monthlySales , в который вы переходите Monthly() при следующем вызове, что приводит к ошибке.

Если вы добавляете return mSales в свою Edit() функцию, ваш код работает должным образом.

В вашем коде также есть некоторые проблемы со стилем, но это выходит далеко за рамки того, о чем вы спрашиваете :).

Комментарии:

1. Спасибо, это было все, я чувствую себя глупо, аф. Что касается моих проблем со стилем, надеюсь, они улучшатся с опытом/временем.

2. Нет проблем, требуется мужество, чтобы показать свой код на SO, но именно так вы учитесь, и мы все там были. Если вы считаете, что ответа достаточно, пожалуйста, поставьте галочку, чтобы он больше не оставался без ответа — и помогите кому-нибудь другому в этом как-нибудь, если хотите.