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

所以我在使用 Python 时遇到了一个奇怪的问题,它与 try 和 except 函数有关。它应该允许我重新输入客户,在这种情况下是 c2,因为 c1 正在将资金转移到 c2。但是,它给了我一个关键错误,而不是说用户不在数据库中并要求我重新输入客户名称。尽管存在视觉错误而不是功能错误,但在下面的代码中第二次使用 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)


吃鸡游戏
浏览 293回答 2
2回答

德玛西亚99

从文档中,“每当请求 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")

30秒到达战场

it gives me a keyerror这是因为在这一行中customer2 = BankSystem.c[c2]您正在尝试dict使用密钥c2(由用户提供)访问。如果没有这样的键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如果您提供它a以及key not present在所有其他情况下将打印。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python