检查 NoneType 的变量并中断 while 循环

Posted

技术标签:

【中文标题】检查 NoneType 的变量并中断 while 循环【英文标题】:Check a variable for NoneType and break a while loop 【发布时间】:2018-04-28 02:02:49 【问题描述】:

我对编程非常陌生,并开始自学使用 Python 进行网络抓取。 我正在从网站的多个页面中抓取玩家数据,并构建了一个 while 循环,该循环抓取“下一个”按钮的 href 以到达下一个玩家的页面。 一切都很好,除了在最后一个可用的玩家之后打破 while 循环。 “下一步”按钮将变灰并且后面没有链接,因此我想停止迭代并将所有内容保存到 csv 中。

我的脚本如下所示:

#name base url and first page to start

BaseUrl = #url
PageUrl = #also url

while True:

  #scraping tables

  try:
      # retrieve link for 'next' player in order
      link = soup.find(attrs="class": "go_to_next_player").get('href')
      # join base url and new link href
      PageUrl = BaseUrl + link
      if link is None:
          break
  except IndexError as e:
      print(e)
      break

#writing to csv

我以为我可以检查检索到的 href 是否为空,因此检查“is None”并中断,但我收到此错误:

In line > PageUrl = BaseUrl + link
TypeError: must be str, not NoneType

我们将不胜感激!我对此很陌生,所以请忽略我的初学者代码。

【问题讨论】:

【参考方案1】:

您可以在对link 进行任何操作之前检查它是否为None,然后打破循环:

if link is not None:
    PageUrl = BaseUrl + link
else:
    break

【讨论】:

为什么不在if link is None: break上面使用link 这确实是一个更好的答案,因为它看起来更类似于 OP 想要的答案。我这样写是为了便于阅读。

以上是关于检查 NoneType 的变量并中断 while 循环的主要内容,如果未能解决你的问题,请参考以下文章

在 WHILE 循环中中断关键字与变量

空的while循环不检查条件

在 MySQL 查询的 IF 条件中使用逻辑 OR 来检查 NoneType 或 float

中断的AVD系统路径。检查您的ANDROID_SDK_ROOT值

while循环内的变量范围

为啥while循环不退出?