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

问题描述 投票:0回答:3

我的函数“getint”返回以下值:

响应:0 id:70402类型:1具有值int值:15

我已将上述值存储在String中,并在代码下面写入以打印'int value'数据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'
python python-2.7 dictionary
3个回答
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)

说明

  1. 使用KeyError来捕获关键错误。
  2. 只在您尝试捕获错误的代码部分使用try / except
  3. 除非您有特定原因,否则您可以在创建字典后检查密钥。

1
投票

你的错误,因为当你通过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改为KeyError


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']
© www.soinside.com 2019 - 2024. All rights reserved.