正在处理一座屎山,大概情况是这样的。有一个自定义的class X
,需要改掉的东西注释写的是y=Union[X, str]
,实际情况也是两种类型到处都混在一起根本分不清。后面所有跟X
类有关的方法一点注释没写,甚至都不做类型判断,而是大量的使用getattr(y, 'name', y)
把水搅得更浑(如果y
是字符串,没有name
,返回字符串本身。否则返回y.name
也是一个字符串)。最离谱的是整座屎山还配了一套 30 分钟才能跑完的 pytest 。
现在需要把混乱的y
分成确定类型的y
和y_str
,使用 pydantic 强制定义数据类型来一点点排错。然而改了几百行以后,所有跟X
有关的方法都被迫改出两种版本的。pytest 不再报类型错误了,却开始出现各种离奇的 bug 挂掉。
有什么更强大的工具可以搞定这件事吗?比如同步检测两个版本的代码,看从哪一步开始两边的数据变得不一致了?