我工作的谷歌的AppEngine上的项目,我最近升级我的pylint的版本: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()
以前,我没有与这里的棉短绒任何问题。现在我越来越:
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
实例。我已经看到,对于pylint,有ways to register type-inferencing helpers ,但我不知道如何使它们与我的装饰器的发电机功能一起工作。
请注意,是一个很老的博客帖子...我认为,logilab.astng
是不再使用,现在你可以使用astroid
代替,但是,这并不让我太更接近我正在寻找的答案...
感谢您的回答。我在这里和那里的闲暇时刻仍然消化它。是否有任何地方的实例库(可能在pylint代码库?),我可以看看这些东西是如何完成的? – mgilson
不幸的是,你可以找到一些结构化例子的最好的地方仍然是所谓的astroid大脑(https://github.com/PyCQA/astroid/tree/master/astroid/brain),并且通常是通过astroid的代码库。您可能会在#pylint-dev(freenode)上获得一些结果 – PCManticore
太棒了。感谢这些例子。我_思考_我能够破解一起可行的事情(在下面单独发布答案)。如果你看到任何看起来很腥的东西,请随时告诉我。如果这一切看起来合理,我可能会继续努力让更多的'ndb'和'pylint'开心,并为其他OSS社区创建单独的回购... – mgilson