【发布时间】:2016-06-28 23:14:28
【问题描述】:
我正在开发一个 Google AppEngine 项目,我最近将我的 pylint 版本升级到:
No config file found, using default configuration
pylint 1.5.6,
astroid 1.4.6
Python 2.7.10 (default, Oct 23 2015, 19:19:21)
这似乎破坏了某些类型推断。具体来说,GAE 的ndb uses a decorator and a generator function to return a "Future" object 是这样的:
@ndb.tasklet
def coroutine_like(item_id):
# do something here...
item = yield EntityType.get_by_id_async(item_id)
raise ndb.Return(item)
我可以这样称呼它:
future = coroutine_like('12345')
# Do other stuff
entity = future.get_result()
以前,我在这里的 linter 没有任何问题。现在我得到了:
E: 42,17: Generator 'generator' has no 'get_result' member (no-member)
E: 48,17: Generator 'generator' has no 'get_result' member (no-member)
E: 60,25: Generator 'generator' has no 'get_result' member (no-member)
E: 74, 8: Generator 'generator' has no 'wait' member (no-member)
E: 88, 8: Generator 'generator' has no 'wait' member (no-member)
E: 95,17: Generator 'generator' has no 'get_result' member (no-member)
我意识到我可以单独# pylint: disable=no-member 这些行,但这会很麻烦。我还意识到我可以通过在模块级别添加抑制代码来抑制模块级别的警告,并且我可以通过修改我的 pylintrc 文件来全局抑制警告。我真的不想做那些事。我宁愿(不知何故)告诉 pylint 用 @ndb.tasklet 装饰器装饰的东西返回 ndb.Future 实例。我已经看到有 ways to register type-inferencing helpers1 用于 pylint,但我不确定如何使它们与我的生成器函数装饰器一起使用。
1请注意,这是一篇相当古老的博文...我认为 logilab.astng 已不再使用,现在您可以改用 astroid,但事实并非如此没有让我太更接近我正在寻找的答案......
【问题讨论】: