我有此代码:
def somefunc(self):
...
if self.mynums>= len(self.totalnums):
if 1 == 1: return self.crawlSubLinks()
for num in self.nums:
if not 'hello' in num: continue
if 0 == 1:
#if though this is never reached, when using yield, the crawler stops execution after the return statement at the end.
#When using return instead of yield, the execution continues as expected - why?
print("in it!");
yield SplashRequest(numfunc['asx'], self.xo, endpoint ='execute', args={'lua_source': self.scripts['xoscript']})
def crawlSubLinks(self):
self.start_time = timer()
print("IN CRAWL SUB LINKS")
for link in self.numLinks:
yield scrapy.Request(link callback=self.examinenum, dont_filter=True)
如您所见,SplashRequest
从未到达,因此在这种情况下其实现并不重要。因此,目标是通过返回self.crawlSubLinks
来继续发送请求。现在是问题所在:
当我在从未达到的return
之前使用SplashRequest
时,搜寻器将通过处理来自crawlSubLinks
的新请求来按预期继续执行。但是,由于某些原因,当我在从未达到的yield
之前使用SplashRequest
时,搜寻器会在return语句之后停止!是在从未执行的行中使用yield
还是return
都无关紧要,对吧?
这是为什么?有人告诉我,这仅与Python的行为有关。但是,如何在for循环中包含yield语句,同时又在for循环上方的if语句中返回并且不返回生成器呢?