ValueError: invalid literal for int() in my program and if statement inside a except

ValueError: invalid literal for int() in my program and if statement inside a except

我有一个程序可以接收输入并将其添加到列表中,然后输出所述列表的平均值。我想这样做,这样你就可以键入 MENU,它将停止 programy() 并让你退出或重新启动 programy()。一切正常,直到您键入 MENU(全部大写)。谢谢大家! :) python.

还是新手
from functools import reduce

def programy():
    running = True

    print("I output the average of a list that you add files to.")
    listy = []

    while running == True:
        def listaverage(givenlist):
            print(sum(listy) / len(listy))

        currentnum = input("Please type a number to add to the list: ")

        try:
            val = int(currentnum)
        except ValueError:
            if str(currentnum) == "MENU":
                running = False
            else:
                print("Not a number!")
                continue

        listy.append(int(currentnum))
        listaverage(listy)

    answer = input("Please type either: EXIT or RESTART")

    if str(answer) == "RESTART":
        running = True
    if answer == "EXIT":
        exit

programy()
Traceback (most recent call last):
  File "C:\Users\hullb\OneDrive\Desktop\average_via_input.py", line 34, in <module>
    programy()
  File "C:\Users\hullb\OneDrive\Desktop\average_via_input.py", line 24, in programy
    listy.append(int(currentnum))
ValueError: invalid literal for int() with base 10: 'MENU
if str(currentnum) == "MENU":
    running = False

while 条件设置为 false 并停止从 运行 开始的下一次迭代,但当前迭代尚未结束,因此在 int(currentnum) 你是尝试将 "MENU" 转换为 int.

改用isdigit()来检查值

if currentnum.isdigit():
    listy.append(int(currentnum))
    listaverage(listy)
else:
    if str(currentnum) == "MENU":
        running = False
    else:
        print("Not a number!")

错误很简单,您将字符串作为输入, 说是否退出循环,即 MENU,并在

listy.append(int(currentnum))

您正在将其类型转换为整数。这就是您收到上述错误的原因。 无需更改太多代码,您只需移动几行即可完成。 就动

    listy.append(int(currentnum))
    listaverage(listy)

在 try 块下,如果它是一个数字,则按要求执行。 还要在主程序之外定义函数 listaverage(listy),除非你希望它充当生成器。