You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python字典get方法默认值的异常行为疑问

为什么Python字典get方法的默认值会提前触发报错?

核心原因很简单:Python在调用函数时,会先把所有参数的表达式都计算完,再把结果传给函数,不管这个参数最后会不会被函数用到。

拿你的代码举例:

  • 当你写data.get("sender", data["from"])时,程序会先执行data["from"]这个表达式,再把它的结果作为默认值传给get方法。如果data里没有"from"键,这一步直接就抛出KeyError了,根本轮不到get方法去判断"sender"是否存在。
  • 再看你那行测试代码:{"sender": "111-111-1111"}.get("sender", {"from": "222-222-2222"}['from']),这里默认值部分的{"from": "222-222-2222"}['from']是能正常算出结果的(临时字典里确实有"from"键),所以求值后得到字符串"222-222-2222",之后get方法发现"sender"存在,就直接返回对应的值,看起来没问题。但如果把默认值里的键改成不存在的,比如{"sender": "111-111-1111"}.get("sender", {"foo": "bar"}['from']),那这个表达式在传参前就会直接抛KeyError,和"sender"存在与否完全没关系。

如果要兼容新旧系统,正确的写法可以用两次get:data.get("sender", data.get("from")),这样即使某个键不存在,只会返回None,不会抛出异常;或者更严谨点,先判断"sender"是否存在,再决定取哪个值:

data["sender"] if "sender" in data else data["from"]

内容的提问来源于stack exchange,提问作者Bigbob556677

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:05:59