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

查看:226
本文介绍了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 = '<div class="name"><a href="www.hello.com">hello world</a></div>'

emptysoup = BeautifulSoup('<a></a>', '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

偷雞成功!


我回答過的問題: Python-QA

这篇关于python3.x - python 如何优雅的处理大量异常语句?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆