卡在应用程序不接受inpu的错误中

2024-04-28 14:25:36 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我正在为我的大学做一个作业,在python上制作一个简单的餐饮系统。代码中出现问题的部分:

def other_services():
    global servicesCart
    services = [{"name":"1. Tent per 10 feet","price":400},{"name":"2. Chairs per 50 peices","price":50},{"name":"3. Tables per 10 pieces","price":80},{"name":"4. Table cloth per 10 peices","price":20}]
    print("Press E to exit")
    while True:
        for f in services:
            print("Name : ",f['name'],"Price : ",str(f['price']))
        selectedService = input("give your order")
        if (selectedService == "E"):
            cms()
        try:
            servicesCart.append(food_lunch[int(selectedService) - 1]) * (people)
        except:
            print("Wrong input, please try again.")}

问题是,无论我输入什么,输出仍然是错误的输入,请再试一次。其中的人是在代码开头询问的来宾数,具有整数值。任何帮助都会大有帮助。谢谢你


Tags: 代码nameinput系统defservice作业餐饮
2条回答

                         # printing your products :

打印(“T代表帐篷\n C代表椅子\n Ta代表桌子\n Tac代表衣服桌子”) #您的产品清单: 列表1={“T”:“帐篷每10英尺价格:400美元”,“C”:“椅子每50张价格:50美元”,“Ta”:“桌子每10张价格:80美元”,“Tac”:“布桌每10张价格:20美元”}

                         #calling customer order :

如果为真: selectedService=input(“下订单”) 如果(selectedService==“E”): 打破 elif列表1中的selectedService: 打印(列表1[selectedService]) 其他: 打印(“您的请求不可用”)

servicesCart.append(food_lunch[int(selectedService) - 1]) * (people)

不起作用:追加food_lunch[int(selectedService) - 1]append返回None,然后将Nonepeople相乘,从而触发异常:

TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'

由于您过滤了所有的异常,您将得到错误消息,您将看到另一个错误:您必须获得“price”字典键

修正:

    try:
        servicesCart.append(food_lunch[int(selectedService) - 1]["price"] * (people)]
    except Exception as e:
        print("{}, please try again.".format(e))

因此,如果发生任何事情,您将得到实际的错误消息,而不是一般的(错误的错误消息)

在这里,您可能希望从列表访问中捕获IndexError。我建议您使用len而不是try/catch块来检查边界

idx = int(selectedService) - 1
if 0 <= idx < len(food_lunch):
    servicesCart.append(food_lunch[idx]["price"] * people)
else:
   print("invalid input")

它的优点是过滤负索引,只要它们的绝对值在范围内(可能不是您想要的),就可以被[](列表末尾访问)愉快地接受

相关问题 更多 >