python程序异常处理语句_python3.x - python 如何优雅的处理大量异常语句?

问 题

我需要用bs4来分析一个html,需要写很多 提取语句,大概几十条,格式如下

twitter_url = summary_soup.find('a','twitter_url').get('href')

facebook_url = summary_soup.find('a','facebook_url').get('href')

linkedin_url = summary_soup.find('a','linkedin_url').get('href')

name = summary_soup.find('div', class_='name').find('a').string

但是每个语句都有可能出异常,如果每个语句都加上try except 就太繁琐了,有没有什么好的方法处理每条语句,出异常赋值为None,不中断程序

解决方案

我在問題的評論裡面有提出一個小問題,如果能有回答,大家比較好掌握你的需求.

如果不想太多,純粹要避免掉 get 的時候可能會產生的錯誤,有個比較偷雞的方式,如果沒有太多奇怪的狀況要處理,也許你可以試試:

twitter_url = (summary_soup.find('a','twitter_url') or {}).get('href')

如果說 bs 的 find 沒有找到東西的話,會 return None,此時我們利用先利用 or 來完成一個 trick 使得 get 永遠不會失敗.再利用字典的 get 與 bs tag 的 get 相似的特性就可以處理掉異常,對變數賦值為 None.

如果要寫的穩固一點的話,參考 @prolifes 的建議滿有幫助的.

下面有人問如果是 find 怎麼偷雞,那我這樣偷偷看,你知道的,偷雞的訣竅就是 假資料:

from bs4 import BeautifulSoup

html = '

'

emptysoup = BeautifulSoup('', 'xml')

soup = BeautifulSoup(html, 'xml')

name = (soup.find('div', class_='name') or emptysoup).find('a').string

print(name)

name = (soup.find('div', class_='nam') or emptysoup).find('a').string

print(name)

結果:

hello world

None

偷雞成功!

扫一扫关注IT屋

微信公众号搜索 “ IT屋 ” ,选择关注与百万开发者在一起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值