我编写了一个带有参数“matcher”的规则引擎,该参数可以是字符串,正则表达式或函数。

当我测试并使用此匹配器时:

    if hasattr(self.matcher, '__call__'):  # 函数
        match_this_rule = self.matcher(input_msg)

PyCharm在第二行给我警告,说“匹配器不可调用”。

我如何避免PyCharm显示此信息?

最佳答案

通常,PyCharm无法知道您的self.matcher是否可调用。就聚合PyCharm而言,您仅测试对象是否具有属性,但是我怀疑PyCharm是否会认识到该属性名称是常量,并且该条件暗示该对象是可调用的。

更改PyCharm行为的唯一解决方案是禁用该语句的检查

if hasattr(self.matcher, '__call__'):
    # noinspection PyCallingNonCallable
    match_this_rule = self.matcher(input_msg)

您可以使用 callable 内置函数来代替自制测试:
if callable(self.matcher):
    match_this_rule = self.matcher(input_msg)

实际上,使用PyCharm3.4时,上述代码不会触发警告,因为PyCharm可以识别内置的callable函数。

这就是说,如果您避免对匹配器使用三种不同的类型,那就更好了。您总是可以将非函数匹配器包装到一个函数中,或者创建一个小类以统一的方式执行匹配。这也将简化代码,因为您不需要为了使用self.matcher而不断测试类型。

关于python - 有关 'not callable'的PyCharm警告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24902258/

10-12 16:58
查看更多