Python 关于';不可调用';

Python 关于';不可调用';,python,pycharm,Python,Pycharm,我编写了一个带有参数“matcher”的规则引擎,该参数可以是字符串、正则表达式或函数 当我测试并使用此匹配器时: if hasattr(self.matcher, '__call__'): # 函数 match_this_rule = self.matcher(input_msg) PyCharm在第二行给我一个警告,说“matcher不可调用” 我怎样才能避免PyCharm显示这一点?PyCharm通常不知道您的self.matcher是否可以调用。就PyChar

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

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

    if hasattr(self.matcher, '__call__'):  # 函数
        match_this_rule = self.matcher(input_msg)
PyCharm在第二行给我一个警告,说“matcher不可调用”


我怎样才能避免PyCharm显示这一点?

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

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

if hasattr(self.matcher, '__call__'):
    # noinspection PyCallingNonCallable
    match_this_rule = self.matcher(input_msg)
您可以使用内置功能代替自制测试:

if callable(self.matcher):
    match_this_rule = self.matcher(input_msg)
事实上,对于PyCharm3.4,上面的代码不会触发警告,因为PyCharm识别内置的
可调用的
函数



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

+1尽早将
matcher
转换为一致的类型而不断测试类型