我编写了一个带有参数'matcher'的规则引擎,它可以是一个字符串,一个正则表达式或一个函数.
当我测试并使用此匹配器时:
if hasattr(self.matcher, '__call__'): # ??
match_this_rule = self.matcher(input_msg)
Run Code Online (Sandbox Code Playgroud)
PyCharm在第二行给我一个警告,说'匹配器不可调用'.
我怎么能避免PyCharm显示这个?
一般来说,PyCharm无法知道你的self.matcher赎罪权.就PyCharm的转换而言,你只是在测试对象是否有属性,但我怀疑PyCharm会认识到属性名是常量而且条件暗示对象是可调用的.
更改PyCharm行为的唯一解决方案是禁用对该语句的检查
if hasattr(self.matcher, '__call__'):
# noinspection PyCallingNonCallable
match_this_rule = self.matcher(input_msg)
Run Code Online (Sandbox Code Playgroud)
您可以使用callable内置函数代替自制测试:
if callable(self.matcher):
match_this_rule = self.matcher(input_msg)
Run Code Online (Sandbox Code Playgroud)
事实上,对于PyCharm3.4,上面的代码不会触发警告,因为PyCharm识别出内置callable函数.
这就是说,如果你避免为你的匹配器使用三种不同的类型会更好.您始终可以将非函数匹配器包装到函数中,或者创建一个小类来以统一的方式执行匹配.这也会简化代码,因为您不需要连续测试类型才能使用self.matcher.
| 归档时间: |
|
| 查看次数: |
4737 次 |
| 最近记录: |