2013-05-06 3 views
-2

My функции:ключевой вывод в Словаре, используя попытку кроме

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

Попробовать/за исключением не работает. Я пытаюсь посмотреть, введен ли пользовательский ввод в словарных клавишах, а затем вернуть ключ и соответствующее значение

Если imp не в словаре, почему это будет бесконечный цикл?

+1

Можете ли вы исправить отступы? –

+0

http://stackoverflow.com/questions/1602934/check-if-a-given-key-already-exists-in-a-dictionary –

+0

Нужно использовать try/exept, а не if/else – user2356391

ответ

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' не определен – user2356391

+0

Я все еще получаю ошибку – user2356391

+0

, это другая проблема, вызванная использованием 'input' в python 2.x вместо' raw_input' –

0

listkeys в коде это список, а не словарь. Поиск элемента в списке не даст вам KeyError.

Если вы используете списки,

item in list_name 

даст истинным или ложным.

Также измените свой вход на raw_input() так, чтобы он рассматривал строки как строки, а не как имена объектов.

Попробуйте использовать что-то вроде следующего:

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

Я изменил его, чтобы избавиться от списка и просто выполнить поиск, если вход находится в словаре – user2356391

+0

Я все еще получаю NameError: имя «BIG» не определено, когда я вводил «BIG» для ввода (и BIG - это int he keys of the словарь) – user2356391

+0

@ user2356391, когда вы выполняете обычный «ввод» в Python, если вы вводите значение типа «BIG», оно считается именем объекта. Здесь он не определен. Итак, как предложил JoranBeasley, измените его на raw_input(), и ваш код будет работать как шарм. –

-1

Может быть, я недоразумение что-то здесь, но и проверить, является ли значение словаря ключ, это очень просто:

'key' in dictionary 

который возвращает True или False.

Кроме того, вы можете даже сделать что-то вроде:

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

И если ключ отсутствует в словаре, вы получите строку "Key not in dictionary", в противном случае вы получите реальную стоимость, отмеченную 'key' ,

+0

Здесь может быть возможная ошибка, если словарь содержит значение «Ключ не в словаре» как значение. –

+0

Это был просто пример. И поскольку мы говорим о биржевых котировках, я очень сомневаюсь, что в этом словаре будет котировка акций '' Ключ не в словаре "'. – jdotjdot

Смежные вопросы