Python Pylint(或其他解决方案)和捕获字典键错误

Python Pylint(或其他解决方案)和捕获字典键错误,python,pylint,Python,Pylint,有没有一种方法可以使用Pylint检查字典KeyErrors?如果没有,最好的选择是什么?我已经开始编写我自己的解决方案,它结合了Pylint和一些定制的checker,但它已经开始以所需的复杂度进入兔子洞 我不是在寻找try/,除了,我需要在程序运行之前检查错误 [编辑]一些上下文 这是一个工业自动化项目,我们开发了一个大型的(主要是C++,1M LOC)分布式设备控制系统,其目的是自主地控制制造过程。该设备控制系统有许多职责,但不是实际的过程控制逻辑。这是为python子模块保留的。原因是,

有没有一种方法可以使用Pylint检查字典
KeyError
s?如果没有,最好的选择是什么?我已经开始编写我自己的解决方案,它结合了Pylint和一些定制的checker,但它已经开始以所需的复杂度进入兔子洞

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

[编辑]一些上下文

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

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

现在,工程师开发的模块只能通过实时制造过程进行测试,如果出现问题,那将是一件大事。非常重要。因此,我需要某种方法来预防任何可能导致控制器失败的潜在错误

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


如前所述,我已经开始编写自己的检查程序,这是非常基本的。这是一种组合,解析文件中的某些表达式,然后使用
eval
exec
组合。它工作得很好,但问题是如何识别表达式。有太多的用例,我真的希望能很快赢。感谢您的帮助。

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


当我包装模块时,我想检查
keyrerrors
,并将dicts作为参数传递给模块,我确切地知道dicts的名称,这会引起问题,并将它们放在范围内。因此,我能够使用一个简单的文件解析器,它使用regex(
re.findall('dict_name(.*),string)
)的组合来查找匹配项,然后使用
EVAL
来测试键。我首先使用pylint检查标准语法错误(和样式等),然后运行我的自定义dict检查器并将输出添加到与pylint相同的格式

KeyError
不是样式问题,也不是通过静态分析可以发现的问题。如果您需要始终保证不会抛出错误,请使用
d.get(key)
而不是
d[key]
。但一些背景可能有助于进一步的指导。“我需要在程序运行之前检查错误”-为什么?如果是这样的话,Python是完成任务的正确语言吗?理论上不运行就检查这样的错误是不可能的。你们可以用这样的解算器解决停顿问题。谢谢你们@乔恩·夏普,我用更多的上下文编辑了我的文章。另外,python可能不是最好的语言,但它已经实现了,我正在寻找一个快速的胜利。如果你还有其他建议,我很乐意听。