2013-05-06 12 views
-2

我的功能是:发现关键除了

def searchstock(): 
dictionary=calcreturn(dictionize(tickers(openfile()),pairslist())) 
inp=raw_input("What is the stock ticker? ") 
while True: 
    try: 
     dictionary[inp] 
     break 
    except KeyError: 
     print("Ticker not found. Please input again ") 

print(inp, dictionary[inp]) 

在try /除了不工作。我试图查看用户输入是否在字典键中,然后返回键和相应的值

如果imp不在字典中,为什么这是一个无限循环?

+1

你能修理缩进吗? – 2013-05-06 23:19:53

+0

http://stackoverflow.com/questions/1602934/check-if-a-given-key-already-exists-in-a-dictionary – 2013-05-06 23:21:17

+0

它需要使用try/exept,而不是如果/ else – user2356391 2013-05-06 23:25:15

回答

2

只是

inp=raw_input("What is the stock ticker? ") 
try: 
    dictionary[inp] 
    break; #exit loop 
except KeyError: 
    print "Nope!" 

,你还需要打破你的while True循环

此外,如果你正在使用py2x你会想在你的代码中使用raw_input代替input

+0

NameError:name'BIG'is not defined – user2356391 2013-05-06 23:22:45

+0

我仍然得到错误 – user2356391 2013-05-06 23:25:35

+0

这是由于在python 2.x中使用'input'而不是'raw_input'导致的另一个问题 – 2013-05-06 23:26:25

0

listkeys的是一个列表,而不是一本字典。在列表中查找元素不会给你一个KeyError。

如果您正在使用列表,

item in list_name 

会给True或False。

还要修改您对raw_input()的输入,以便它将字符串视为字符串而不是对象名称。

使用类似以下尝试:

try: 
    dictionary_name[key] 
except KeyError: 
    #do something 
    print "Key Error" 
+0

我改变它摆脱列表,只是搜索,如果输入是在字典 – user2356391 2013-05-06 23:35:39

+0

我仍然得到NameError:名称'大'没有定义当我输入“BIG”的输入(和BIG是int他的键字典) – user2356391 2013-05-06 23:36:40

+0

@ user2356391当你在Python中做一个正常的'输入'时,如果你输入一个像'BIG'这样的值,它被认为是一个对象名。这里没有定义。正如JoranBeasley所建议的,将其更改为raw_input(),您的代码将像魅力一样工作。 – 2013-05-06 23:40:38

-1

也许我在这里误解的东西,而是要检查的值是一个字典的关键,这是非常简单的:

'key' in dictionary 

返回TrueFalse

此外,你甚至可以做这样的事情:

mydictionary.get('key', 'Key not in dictionary') 

如果关键是不是在字典中,你会得到字符串"Key not in dictionary",否则你会得到通过'key'标记的实际值。

+0

如果字典中包含'Key not in dictionary'本身作为一个值,那么这里可能有一个bug。 – 2013-05-06 23:35:06

+0

这只是一个例子。而且由于我们正在谈论股票行情,我非常怀疑该词典中会有股票代码 ''键入字典'“。 – jdotjdot 2013-05-07 02:08:07