2013-05-06 75 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