所以我在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)
答案 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 present
和a
都赋予key not present
,则会打印ng build --prod
。