我的代码无法通过python 3

时间:2019-01-13 13:40:52

标签: python python-3.x spyder

所以我在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)

2 个答案:

答案 0 :(得分:1)

从文档中,“每当请求dict()对象(使用a = adict [key]格式)并且该密钥不在词典中时,Python都会引发KeyError。”因此,您应该在您的except块中检查是否存在键盘错误:

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")

答案 1 :(得分:0)

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 presenta都赋予key not present,则会打印ng build --prod