获取" KeyError:"尝试从字典中检索键值时

时间:2018-03-06 11:38:37

标签: python python-2.7 dictionary

我的功能" getint"返回以下值:

回复:0   id:70402   类型:1   有价值   int值:15

我已将上述值存储在String中,并在代码下面写入以打印' int值'数据15。

代码:

s= '''response: 0
      id: 70402
      type: 1
      has value
      int value: 15
   '''

s=s.replace("has","has:")
s = s.strip()
print s
d = {}
for i in s.split('\n'):
    try:
        key, val = i.split(":")
        d[key.strip()] = val.strip()
        print d['int value']
    except ValueError:
        print "no key:value pair found in", i

输出获取KeyError:'int value'

输出:

  response: 0
  id: 70402
  type: 1
  has: value
  int value: 15 Traceback (most recent call last):   File "/home/tests/test_lang.py", line 18, in <module>
print d['int value'] KeyError: 'int value'

3 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。试试下面的内容。

Activity

<强>解释

  1. 使用for i in s.split('\n'): key, val = i.split(":") d[key.strip()] = val.strip() try: print(d['int value']) except KeyError: print("no 'int value' found in", d) 来捕捉关键错误。
  2. 仅在您尝试捕获错误的代码部分使用KeyError / try
  3. 除非您有特殊原因,否则您可以在创建字典后检查密钥。

答案 1 :(得分:1)

您的错误,因为当您浏览E Failed: DID NOT RAISE <class 'FileNotFoundError'> 时。你的第一个s tring 但是i: response = 0当时没有的print d['int value']。这将有效:

d

如果您想使用密钥获取错误。你应该添加:

s= '''response: 0
  id: 70402
  type: 1
  has value
  int value: 15
'''

s=s.replace("has","has:")
s = s.strip()
print s
d = {}
for i in s.split('\n'):
    try:
        key, val = i.split(":")
        d[key.strip()] = val.strip()
    except ValueError:
        print "no key:value pair found in", i
print d['int value']

或者只需将except KeyError: print "key error found in", i 更改为ValueError

即可

答案 2 :(得分:1)

print d['int value']写成一边进行循环

s= '''response: 0
      id: 70402
      type: 1
      has value
      int value: 15
   '''

s=s.replace("has","has:")

s = s.strip()
print s
d = {}
for i in s.split('\n'):
    try:
        key, val = i.split(":")
        d[key.strip()] = val.strip()

    except ValueError:
        print "no key:value pair found in", i
print d['int value']