作者NewSpec (新规格)
看板Python
标题[问题] 请问该如何精简的撰写检查参数程式码?
时间Mon Jan 28 15:53:29 2013
大家好
小弟我现在正在撰写一个网页的parser
会把网页中某些元素parse之後存入dictionary中
但现在遇到的问题是
在网页中存放我要的资讯的区块可能并不是所有栏位都具备的
在这个时候我就必须检查取得的Tag物件是否为None後再做下一个资料的检查
(我用BeautifulSoup)
所以程式码看起来是长这样的
try:
data['name'] = name_div.text
#name_div is None, thus no 'name' available
except AttributeError:
data['name'] = ''
只有一两个栏位还好, 但如果要检查十几个栏位的话就感觉很蠢
一样的try-except要写十几个
但如果用单一个try-except把全部的检查都包起来的话
发生了一个错误就会直接跳掉, 後面的栏位都检查不到了
所以想请问大家, 这个问题该怎麽解决呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.79.59.62
1F:推 Reylod:try hasattr 01/28 16:01
2F:→ Reylod:a = b.text if hasattr(b, 'text') else '' 01/28 16:01
3F:→ tjjh89017:try this " name_div.text or '' " 01/28 17:48
※ 编辑: NewSpec 来自: 36.224.204.173 (01/28 20:22)
4F:→ NewSpec:谢R大, 都忘了还有hasattr()能用:) 01/28 20:22
5F:→ NewSpec:t大你的做法一样会出AttributeError喔@@" 01/28 20:23
6F:推 darkgerm:data.get('name', '') 01/28 21:41
7F:→ darkgerm: docs.python.org/2/library/stdtypes.html#dict.get 01/28 21:43
8F:推 swpoker:这个应该就是aop拉 01/29 10:05
9F:推 swpoker:getattr( object, name[, default]) 01/29 10:25
10F:→ Reylod:楼上方法更符合semantic 01/30 11:49
11F:→ NewSpec:getattr()不行喔, 它会直接跟object取name了 01/30 14:54
12F:→ uranusjr:get 和 hasattr 是最佳解; 这边应该是後者比较适合 01/30 15:00
13F:→ uranusjr:倒过来(foo.name = dic['name'])才是用 get 比较好 01/30 15:01