我的代码在python3中的try和except函数中没有按预期运行

2024-09-29 19:27:14 发布

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

所以我对Python有一个奇怪的问题,它与try和except函数有关。它应该允许我重新输入客户,在本例中是c2,因为c1正在向c2转移资金。但是,它给了我一个keyerror,而不是说用户不在数据库中,并要求我重新输入客户名称。在下面的代码中,try和except的第二个用法虽然存在视觉缺陷而不是功能性缺陷,但仍然有效。你知道吗

我尝试过改变我使用try和except的位置,尝试过在线搜索,但没有找到解决方案。我只做了几个月的Python,它是断断续续的。你知道吗

elif option == 3:
            print("Option", 3)
            try:
                    c2 = input("Customer 2")
                    customer2 = BankSystem.c[c2]
            except ValueError:
                print("\n>>>An exception occured ~ invalid i/p")
                print("\t~Customer not in database")
            print()
            if "c2" in BankSystem.c: ## check for valid account id
                print(customer2)
            try:
                    amount = float(input("Amount to transfer "))
                    self.tranfer(customer2, amount)
            except ValueError:
                print("\n>>>An exception occured ~ invalid i/p")
                print("\t~Non-numeric data entered")
            else:
                print("\n>>>>>>>account:{} does not 
exist".format("c2"))
            print(self)
            print(customer2)

Tags: aninput客户exceptionnotcustomerprintc2
2条回答

在文档中,“每当请求dict()对象(使用格式a=adict[key]),并且该键不在字典中时,Python就会引发KeyError。”因此,您应该检查except块中的KeyError:

try:
    c2 = ....
except KeyError:
    print("\n>>>An exception occured ~ invalid i/p")
    print("\t~Customer not in database")

编辑: 您可以将try/except重组为:

        try:
            c2 = input("Customer 2")
            customer2 = BankSystem.c[c2]
            if "c2" in BankSystem.c: ## check for valid account id
                print(customer2)
                amount = float(input("Amount to transfer "))
                self.tranfer(customer2, amount)
            else:
                print("\n>>>>>>>account:{} does not exist".format("c2"))
            print(self)
            print(customer2)
        except KeyError:
            print("\n>>>An exception occured ~ invalid i/p")
            print("\t~Customer not in database")
        except ValueError:
            print("\n>>>An exception occured ~ invalid i/p")
            print("\t~Non-numeric data entered")
it gives me a keyerror

这是因为在这条线上

customer2 = BankSystem.c[c2]

您正试图使用键c2(由用户给定)访问dict。如果没有这样的密钥KeyError就会发生。请注意,不使用try-except,您可以按以下方式检查dict是否具有键:

d = {'a':1}
k = input('key:')
if k in d.keys():
    print('key present')
else:
    print('key not present')

将打印key present,如果您给它akey not present在所有其他情况下。你知道吗

相关问题 更多 >

    热门问题