Hope it's not been asked before, which one of these is considered better / faster / more 'pythonic'? break after check:
while True:
#returns either a `page` or None
p += 1
page = self.page_has_articles(p)
if page:
yield page
else:
break
or first check and break:
while True:
p += 1
page = self.page_has_articles(p)
if not page:
break
yield page