簡體   English   中英

收益率在Python中沒有?

[英]yield returns None in python?

我在兩個文件中有2個python類。

  • 文件:LdapConnection,類:LdapClass(),方法:getMachines(self)

     @defer.inlineCallbacks def getMachines(self): c = ldapconnector.LDAPClientCreator(reactor, ldapclient.LDAPClient) overrides = {self.basedn: (self.serverip, 389)} client = yield c.connect(self.basedn, overrides=overrides) yield client.bind(self.binddn, self.bindpw) o = ldapsyntax.LDAPEntry(client, self.basedn) results = yield o.search(filterText=self.query) for entry in results: for i in entry.get('name'): self.machineList.append(i) yield self.machineList print self.machineList return 

上面打印報表打印所有entires在machineList

  • 文件:扭曲,類:高速緩存,方法:loadSettings(自己)

     @defer.inlineCallbacks def loadSettings(self): returned = yield LdapClass().getMachines() print returned 

在上一堂課中,我的印刷品None打印。 我在這里做錯了什么?

getMachines() ,不要yield self.machineList

在由defer.inlineCallbacks裝飾的方法中,yield執行的是yield執行,直到參數( defer.Deferred對象)用值回調(如果不是defer.Deferred ,則將繼續)。 (這與Python 3中的new await關鍵字相似。)您正在loadSettings()正確使用此關鍵字。

getMachines() ,您沒有defer.Deferred 您有一個list ,因此它將繼續。 若要將該值返回給調用方,請在方法末尾調用returnValue(self.machineList)

看起來您的loadSettings()例程正在產生getMachines()生成器,而不是生成器的結果。 也許前者應該在做“ yield from …… yield from ”?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM