这是我在 python 日志文件中看到的一个奇怪的错误。
import traceback
mat = [{"a": 1, "b": 2}, {"a": 3, "b": 4}]
def fun(a, b, c):
if c is None:
return a + b
else:
return a + b + c
try:
for x in mat:
x["d"] = fun(x["a"], x["b"], x.get("c"))
except BaseException as e:
emsg = ''.join(traceback.format_exception(None, e, e.__traceback__))
print(emsg)
#py> KeyError: "c"
我无法重现该错误,据我了解,由于我正在使用
KeyError
,因此不可能获得 "c"
的 x.get
。因此,我对这个消息感到非常困惑。有谁知道这是 CPython 中的罕见错误还是我忽略了某些东西?
仔细想想,我猜答案就在
.pyc
文件中。我之前更新了 .py
文件以将 x["c"]
替换为 x.get("c")
,如果现在由于某种原因,.pyc
的覆盖被另一个进程阻止,并且 .pyc
仅引用 .py
中的行号
文件进行回溯(听起来很现实),这将给出我观察到的行为。
感谢您的帮助!