Python ValueError:程序中int()的文本无效,if语句位于Exception中

Python ValueError:程序中int()的文本无效,if语句位于Exception中,python,int,literals,valueerror,except,Python,Int,Literals,Valueerror,Except,我有一个程序,它接受输入并将其添加到列表中,然后吐出所述列表的平均值。我想让您可以键入MENU,它将停止programy(),让您退出或重新启动programy()。在您键入菜单(全部大写)之前,一切正常。谢谢大家!:)对python来说仍然是新手 from functools import reduce def programy(): running = True print("I output the average of a list that you add file

我有一个程序,它接受输入并将其添加到列表中,然后吐出所述列表的平均值。我想让您可以键入MENU,它将停止programy(),让您退出或重新启动programy()。在您键入菜单(全部大写)之前,一切正常。谢谢大家!:)对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()
回溯(最近一次呼叫最后一次):
文件“C:\Users\hulb\OneDrive\Desktop\average\via_input.py”,第34行,在
编程()
文件“C:\Users\hulb\OneDrive\Desktop\average\via_input.py”,第24行,在programy中
追加(int(currentnum))
ValueError:基为10的int()的文本无效:“菜单”
while
条件设置为
false
,并停止下一次迭代的运行,但当前迭代尚未结束,因此在
int(currentnum)
中,您正在尝试将
“菜单”
转换为int

使用
isdigit()
检查值

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

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

listy.append(int(currentnum))
您正在将其转换为整数。这就是为什么会出现上述错误。 在不改变大部分代码的情况下,只需移动几行即可完成。 快走

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

您正在检查currentnum是否为字符串,然后尝试将其作为整数添加到列表中。当您将running设置为False时,它仍将执行listy.append()。在我看来,你可以只做break而不是运行=false。如果你需要调试你的程序,有多个逻辑错误。例如:在try块中,执行所有本应正常工作的操作(在“list.append”和下一行提示)此外,与菜单相关的代码也应位于循环中。将
try:int(currentnum)添加到此处的注释中,除了ValueError:if str(currentnum)=“menu”:
是不正确的,因为您正在检查有效的传入整数值而不是字符串,if/else语句应该在try/except之外,并且您并不真正需要
else:
,因为这就是
try:。。。除非:…
如果不是整数值输入,则引发异常…希望这有帮助:)是的,谢谢!!我对try/except的概念有点模糊。错误就在那之前,事实上,if语句不应该在try/except的
except
块中,if/else逻辑似乎有点不正确,因为它检查字符串输入,然后说
else:print('nota number')
@FishingCode-Right,错误在上面,但处理完后,上面的内容将使他完成这项工作,只需要两行轮班。好的。你在哪里移动你在回答中写的句子。。?
listy.append(int(currentnum))
    listy.append(int(currentnum))
    listaverage(listy)