Pylint(或其他解决方案)和捕获字典KeyErrors

时间:2018-03-06 18:09:51

标签: python pylint

有没有办法使用Pylint检查字典KeyError?如果没有,最好的选择是什么?我已经开始编写我自己的解决方案,它结合了Pylint和一些自定义检查器,但它开始沿着兔子洞进行复杂程度的所需。

我不是在寻找try / except,我需要在程序运行之前检查错误。

[编辑]一些上下文

这是一个工业自动化项目,我们开发了一个大型(主要是C ++,~1M LOC)分布式设备控制系统,旨在自主控制制造过程。该设备控制系统有许多职责,但不是实际的过程控制逻辑。这是为python子模块保留的。原因在于,通常是自动化工程师开发这种逻辑,由于他们的工作,他们不是SW开发人员。他们对高级编程/脚本语言有很好的理解,例如matlab,VBA,python等,但不是最熟悉的更低级的低级概念,例如通过主要的C ++控制系统管理这些系统的更复杂要求,Python允许更加快速和低风险的方法来开发日常制造设备控制器。

我开发了一个python“wrapper”,它通过websockets充当主C ++项目的接口,websockets负责主要功能,例如主循环,websockets,错误处理等。这个“包装器”导入了一些由工程师编写的模块。这些模块本质上是一系列工厂函数,主包装器提供了一个包含工程师可以使用的所有变量的字典。

现在,工程师开发的模块只能通过实时制造流程进行测试,如果出现问题,这是一个大问题。非常重要。因此,我需要在某种程度上抢占任何可能导致控制器失败的潜在错误。

虽然我很欣赏pylint被更广泛地用作linter,即样式,因为它编译时,它确实捕获了许多可能导致失败的语法错误。显然还有很多其他潜在的问题,所以我不希望能够构建一些能够解决所有错误的东西,但我希望它能够解决很多问题。

如上所述,我已经开始编写自己的检查器,这是非常基本的。它是为某些表达式解析文件,然后使用evalexec的组合的组合。它工作得很好,但问题是识别表达式。有太多的用例,我真的希望快速获胜。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

事实证明这比我想象的更简单:

当我要包装我要检查KeyErrors的模块,并将dicts作为参数传递给模块时,我确切地知道了那些冒犯并且在范围内具有它们的dicts的名称。因此,我能够使用一个简单的文件解析器,它使用正则表达式(re.findall('dict_name(.*])', string))的组合来查找匹配项,然后使用EVAL来测试密钥。我首先使用pylint检查标准语法错误(和样式等),然后运行我的自定义dict检查器并将输出添加到与pylints相同的格式。