我经常遇到
KeyErrors
被这样的情况触发
d: dict[str, int] = {"a": 1}
foo = "bar"
...
d[foo] # boom
我们的团队使用 mypy 进行类型检查。如果可以自动检测
d[foo]
的使用,并禁止使用 d.get(foo)
,则结果将具有明确的 Optional[int]
类型,这将防止作者忘记密钥的边缘情况不存在。
是否有工具能够检测并警告此类方括号访问?在某些情况下我会忘记
.get(...)
不能作为替代方案吗?
你绝对可以用 Semgrep 做到这一点,甚至建议修复:
rules:
- id: use .get
patterns:
- pattern-inside: |
$D = {...}
...
- pattern: $D[$K]
fix: $D.get($K)
message: Match found
languages: [python]
severity: WARNING