使用以下代码,我无法摆脱循环:
import requests
from bs4 import BeautifulSoup
link = "http://www.wuxiaworld.com/"
html = requests.get(link)
soup = BeautifulSoup(html.content, "html.parser")
all_aside = soup.find_all("aside", id="recent-posts-2")
for aside in all_aside:
for li in aside.find_all("li"):
for a in li.find_all("a"):
if "ATG" in a.text:
print(a.text)
break
我想创建一个脚本,以便在发布故事的新章节时通知我。我刚刚开始制作它但是我被困在这里(它打印了所有包含字符串" ATG"在最近的帖子中)的新版本。
我做了一些研究,发现我应该打破所有循环,但是当我尝试这些代码时,没有任何内容被打印到控制台:
import requests
from bs4 import BeautifulSoup
link = "http://www.wuxiaworld.com/"
html = requests.get(link)
soup = BeautifulSoup(html.content, "html.parser")
all_aside = soup.find_all("aside", id="recent-posts-2")
for aside in all_aside:
for li in aside.find_all("li"):
for a in li.find_all("a"):
if "ATG" in a.text:
print(a.text)
break
break
break
谢谢。
答案 0 :(得分:4)
实际上,他们正在工作,完全按照设计。这不一定与某些人认为他们应该工作的方式一样: - )
外部和中间循环的X = tf.placeholder(dtype=tf.float32, shape=[100,28,28,1])
W = tf.get_variable(...)
Y = tf.matmul(X,W)
print(Y.get_shape()[0].value)
语句将执行,无论内部break
是否已发生。换句话说,它们是无条件的,因此这些循环只会执行一次。
你可以通过以下方式解决这个问题:
break
另一种可能性(可能是“更干净”)是将它重构为一个函数:
foundIt = False
for aside in all_aside:
for li in aside.find_all("li"):
for a in li.find_all("a"):
if "ATG" in a.text:
print(a.text)
foundIt = True
break
if foundIt: break
if foundIt: break
并将其命名为:
def printOne(asides):
for aside in asides:
for li in aside.find_all("li"):
for a in li.find_all("a"):
if "ATG" in a.text:
print(a.text)
return
答案 1 :(得分:1)
在第一种情况下,在for循环结束时中断,但下一个for循环仍将运行。在第二种情况下,在第一次for循环的第一次迭代后立即中断,并立即保留所有循环。
另一个答案提到使用一系列if语句来休息 您还可以使用异常处理来执行多级中断。
class BreakException(Exception):
pass
try:
for aside in all_aside:
for li in aside.find_all("li"):
for a in li.find_all("a"):
if "ATG" in a.text:
print(a.text)
raise BreakException
except BreakException:
pass
see here了解更多打破多个级别的方法。
答案 2 :(得分:0)
对于除了最外层的循环之外的所有人来说,有点丑陋的黑客(......好吧,很好,完全和完全可憎):
for ...:
...
else:
continue
break
答案 3 :(得分:0)
也许上面的答案也是对的,但也可能有另一种罕见的情况。
如果您使用 PyCharm 进行调试,也有可能您编辑了代码并且代码行在视觉上向上/向下移动但它不会被解释/执行< /strong> 直到调试会话重新启动。
很明显,重新启动调试会话效果很好...