[英]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.