for 循环中出现异常时如何跳过继续处理?

2017-03-14 14:34:58 +08:00
 Curtain
for 循环中出现不可预测异常时,跳过本次循环并 print 出错误内容,继续执行下一次循环应该如何写?
现在使用的是 try...except...这样的,使用 continue 方法.
但是在实测中,如果连接失败,程序之间停止.
在代码中可以看出,是使用的 bs 抓取 url.程序循环到其中某一条连接时,内容里没有包含指定 a 标签的内容的话,也会报错并终止程序.
应该如何实现继续循环?
for u in product_page_url:
a = requests.get(u.strip())
soup = BeautifulSoup(a.text, 'html.parser')
try:
clean_downurl = soup.find(class_ = 'downurl').a['href']
b.append(clean_downurl)
print u
except:
continue
16772 次点击
所在节点    Python
9 条回复
jpyl0423
2017-03-14 14:58:57 +08:00
可能 requests.get 这一步就异常了.
Curtain
2017-03-14 15:21:15 +08:00
@jpyl0423 在执行 clean_downurl = soup.find(class_ = 'downurl').a['href'] 的时候。提示 soup 的错误,没有找到 a 标签。然后就终止程序了。这应该怎么写呀?
omg21
2017-03-14 16:07:13 +08:00
第一个,你在 requests.get 之前并没有做 try ,所以在连接出错时会报错停止。
第二个,我不知道你这个 BS 的 find 的语法对不对,但是我认为如果 try 不起作用,你可以换个方法,比如在后边做个判断,用 if 代替 try 。
awanabe
2017-03-14 16:11:16 +08:00
except 没有捉到异常? 加个 Exception 试试?
Curtain
2017-03-14 16:56:22 +08:00
@omg21 第一个已经修改 try 的位置,已经解决了,第二个 BS 的语法经过测试是可以正常获取到值的。如果解决不了的话在考虑使用 if 吧。
grimpil
2017-03-14 22:17:03 +08:00
错误原因是啥,报错信息你能不能看懂
guyskk
2017-03-15 10:12:46 +08:00
@awanabe #4 别瞎猜啊, try except 捕获所有异常, try except Exception 捕获 Exception 类型的异常。另外要避免 try except 不加异常类型的用法,这很容易吃掉不应该忽略的异常。
Curtain
2017-03-17 09:00:51 +08:00
@grimpil 错误原因看得懂的,列表中的某些 url 不存在我找的指定连接,然后就 bs 就提示错误了, requests 的错误是因为网络有时不稳定,连接不到 url 然后报错的。
grimpil
2017-03-17 10:16:31 +08:00
clean_downurl = soup.find(class_ = 'downurl')
if clean_downurl is not None:
clean_downurl = clean_downurl.a['href']
我是习惯这样,如果变量获取了某个值,进行下一步操作前,先判断一下是否为空,是否和预期一致

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/347365

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX