作者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