【问题标题】:finding key in dict using try except使用 try except 查找 dict 中的键
【发布时间】:2013-05-06 23:18:43
【问题描述】:

我的功能是:

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/except 不起作用。我正在尝试查看用户输入是否在字典键中,然后返回键和相应的值

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

【问题讨论】:

  • 你能修复缩进吗?
  • 它需要使用try/exept,而不是if/else
  • 你不应该修改你原来的问题......因为现在看起来每个答案都只是复制并粘贴了你所拥有的(事实并非如此)
  • 你想用循环来完成什么?

标签: python dictionary try-catch except


【解决方案1】:

只是

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

你还需要跳出while True 循环

如果你使用的是 py2x,你会想要使用 raw_input 而不是 input

【讨论】:

  • NameError: name 'BIG' is not defined
  • 这是在 python 2.x 中使用 input 而不是 raw_input 引起的不同问题
  • 代码的问题是NameError: name 'BIG' is not defined
  • @user2356391 当您在 Python 中进行正常的“输入”时,如果您输入像“BIG”这样的值,则它被认为是一个对象名称。这里没有定义。因此,正如 JoranBeasley 所建议的,将其更改为 raw_input(),您的代码将像魅力一样工作。
【解决方案2】:

您的代码中的listkeys 是一个列表而不是字典。在列表中查找元素不会给您一个 KeyError。

如果您使用的是列表,

item in list_name

将给出 True 或 False。

同时修改您对 raw_input() 的输入,使其将字符串视为字符串而不是对象名称。

尝试使用以下内容:

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

【讨论】:

  • 我改变了它以摆脱列表,只需搜索输入是否在字典中
  • 我仍然得到 NameError: name 'BIG' is not defined when I input "BIG" for input(BIG 是字典的键)
  • @user2356391 当您在 Python 中进行正常的“输入”时,如果您输入像“BIG”这样的值,则它被认为是一个对象名称。这里没有定义。因此,正如 JoranBeasley 所建议的,将其更改为 raw_input(),您的代码将像魅力一样工作。
【解决方案3】:

也许我在这里误解了一些东西,但是要检查一个值是否是字典键,这很简单:

'key' in dictionary

返回TrueFalse

此外,您甚至可以执行以下操作:

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

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

【讨论】:

  • 如果字典包含“键不在字典中”本身作为值,则此处可能存在错误。
  • 这只是一个例子。既然我们谈论的是股票代码,我非常怀疑那本字典中是否会有股票代码 "Key not in dictionary"
猜你喜欢
  • 2018-08-10
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
相关资源
最近更新 更多