【python】问题记录,字典数据添加报错:报错:KeyError: ‘dd‘,怎么解决

代码报错问题:

a = {}

a['name'] = 'zhangsan'
print(a)
try:
    a['dd']['age'] = 5
except:
    a['dd']['age'] = 8
print(a)
报错:KeyError: 'dd',怎么解决

错误发生是因为在尝试访问 a[‘dd’][‘age’] 时,字典 a 中不存在 ‘dd’ 这个键。因此,尝试访问 ‘dd’ 键下的 ‘age’ 键会抛出 KeyError。

要解决这个问题,你可以在尝试访问之前先检查 ‘dd’ 键是否存在于字典 a 中。如果不存在,你可以先创建这个键。这里是一个修改后的代码示例:

a = {}
a['name'] = 'zhangsan'
print(a)

try:
    # 检查 'dd' 键是否已经存在,如果不存在,则创建它
    if 'dd' not in a:
        a['dd'] = {}
    a['dd']['age'] = 5
except:
    # 如果发生异常,说明 'dd' 键已经存在,但 'age' 键不存在
    a['dd']['age'] = 8

print(a)

在这个修改后的代码中,我们首先检查 ‘dd’ 键是否存在于字典 a 中。如果不存在,我们创建一个名为 ‘dd’ 的新键,并将它的值设置为一个空字典 {}。这样,在尝试访问 ‘dd’ 键下的 ‘age’ 键时,就不会抛出 KeyError 了。

如果你不想在代码中添加 if-else 语句,你也可以使用字典的 get() 方法,它允许你提供一个默认值,如果键不存在时返回。这里是一个使用 get() 方法的示例:

a = {}
a['name'] = 'zhangsan'
print(a)

try:
    # 使用 get() 方法安全地访问 'dd' 键,如果不存在,则返回一个空字典
    a['dd'] = a.get('dd', {})
    a['dd']['age'] = 5
except:
    # 如果发生异常,说明 'dd' 键已经存在,但 'age' 键不存在
    a['dd']['age'] = 8

print(a)

在这个代码中,a.get(‘dd’, {}) 会尝试获取 ‘dd’ 键的值。如果 ‘dd’ 键不存在,它会返回一个空字典 {},这样就不会抛出 KeyError 了。

当你第一次尝试添加 ‘dd’ 键时,由于 ‘dd’ 键在 a 中不存在,你的代码会抛出 KeyError。但是,由于 try 块中的代码并没有处理这个异常,Python 解释器会将异常抛出到代码块之外,这就是你看到第一次添加后没有打印结果的原因。在实际运行中,第一次添加时程序已经因为 KeyError 而终止执行了。

这里是修改后的代码,它会正确地处理 KeyError:

a = {}
a['name'] = 'zhangsan'
print(a)

try:
    # 安全地添加 'dd' 键,如果不存在,则创建它
    a['dd'] = a.get('dd', {})
    a['dd']['age'] = 5
except KeyError:
    # 如果发生 KeyError,说明 'dd' 键已经存在,但 'age' 键不存在
    a['dd']['age'] = 8

print(a)

在这个代码中,我们使用 get() 方法来安全地尝试访问 ‘dd’ 键。如果不存在,get() 方法将返回 None,并且我们会在 ‘dd’ 键不存在时创建它。如果在尝试设置 ‘age’ 键时发生 KeyError,说明之前 ‘dd’ 键不存在,现在由于 get() 方法的默认值而创建了它。在这种情况下,我们捕获异常并设置 ‘age’ 键的值为 8。

如果你不希望程序在遇到 KeyError 时终止执行,你可以使用 try-except 块来捕获异常,就像上面的代码示例那样。这样,即使发生了异常,程序也会继续执行,并且你可以处理异常情况。

当你第一次添加 ‘name’ 键的时候,没有报错,是因为在 Python 字典中添加一个不存在的键是不会抛出 KeyError 的。只有在尝试访问一个不存在的键时(即尝试访问一个不存在的键的值),才会抛出 KeyError。

在你提供的代码中:

a = {}
a['name'] = 'zhangsan'
print(a)

这一部分代码是正确的。你创建了一个空字典 a,然后使用 ‘name’ 作为键来添加一个值 ‘zhangsan’。因为 ‘name’ 这个键在这个时刻并不存在于字典 a 中,所以 Python 会创建一个新的键 ‘name’,并将其值设置为 ‘zhangsan’。这个操作不会抛出 KeyError,因为 KeyError 是当你尝试访问一个不存在的键时才会抛出的异常。

接下来的代码:

try:
    a['dd']['age'] = 5
except:
    a['dd']['age'] = 8
print(a)

这里的问题是,你在尝试访问 ‘dd’ 键的时候,这个键并不存在于字典 a 中。因此,当你尝试设置 ‘dd’ 键的 ‘age’ 属性时,Python 会抛出 KeyError,因为它无法找到键 ‘dd’。这个异常没有被 try 块捕获,所以它会向上冒泡,直到被程序中的其他 except 块捕获或者导致程序终止。

在你提供的代码中,并没有处理 ‘dd’ 键不存在的异常,所以程序会因为 KeyError 而终止执行。如果你想在 ‘dd’ 键不存在时创建它,你应该在 try 块中添加一个检查,或者使用 get() 方法来安全地访问键。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔都吴所谓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值