Ich bin auf einem Google App Engine-Projekt arbeiten, und ich meine Pylint Version vor kurzem aufgerüstet:Pylint, Koroutinen, Dekorateure und die Typenanalyse
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)
Dies scheint eine Art Inferenz gebrochen zu haben. Insbesondere GAE ndb
uses a decorator and a generator function to return a "Future" object wie folgt aus:
@ndb.tasklet
def coroutine_like(item_id):
# do something here...
item = yield EntityType.get_by_id_async(item_id)
raise ndb.Return(item)
Ich könnte es so etwas wie dieses nennen:
future = coroutine_like('12345')
# Do other stuff
entity = future.get_result()
Bisher habe ich keine Probleme hier mit dem Linter haben. Jetzt erhalte ich:
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)
Ich weiß, dass ich diese Zeilen einzeln # pylint: disable=no-member
kann aber das wäre umständlich. Ich erkenne auch, dass ich diese Warnung auf der Modulebene unterdrücken kann, indem ich den Unterdrückungscode auf Modulebene hinzufüge, und ich kann die Warnung global unterdrücken, indem ich meine pylintrc-Datei modifiziere. Ich will diese Dinge nicht wirklich machen. Ich würde viel lieber (irgendwie) pylint sagen, dass die mit dem @ndb.tasklet
Dekorator dekorierten Objekte ndb.Future
Instanzen zurückgeben. Ich habe gesehen, dass es ways to register type-inferencing helpers für pylint gibt, aber ich bin nicht sicher, wie man sie mit meinem Dekorateur einer Generatorfunktion arbeiten lässt.
Beachten Sie, dass eine ziemlich alte Blog-Post ist ... Ich denke, dass logilab.astng
nicht mehr in Gebrauch ist, und jetzt würden Sie astroid
stattdessen verwenden, aber das macht mich nicht zu viel näher an die Antwort, die ich suche ...
Danke für diese Antwort. Ich verdaue es immer noch in den wenigen Momenten, die ich hier und da habe. Gibt es irgendwo ein Repository von Beispielen (vielleicht in der pylint Codebase?), Wo ich einen Blick darauf werfen kann, wie diese Dinge gemacht werden? – mgilson
Leider ist der beste Ort, wo Sie einige strukturierte Beispiele finden können, immer noch das sogenannte Gehirn von Astroid (https://github.com/PyCQA/astroid/tree/master/astroid/brain) und generell durch die Astrobasiscodebasis. Sie könnten auch einige Ergebnisse auf # pylint-dev (freenode) – PCManticore
Awesome erhalten. Danke für diese Beispiele. Ich denke, dass ich in der Lage war, etwas zu bearbeiten, das zusammen funktioniert (als separate Antwort unten veröffentlicht). Wenn Sie etwas sehen, das dort fischig aussieht, wenden Sie sich bitte an mich. Wenn alles vernünftig aussieht, werde ich vielleicht weiter versuchen, mehr von 'ndb' und' pylint' zu machen und ein separates Repo für den Rest der OSS-Community erstellen ... – mgilson