看板 Python 關於我們 聯絡資訊
大家好 小弟我現在正在撰寫一個網頁的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
Reylod:try hasattr 01/28 16:01
Reylod:a = b.text if hasattr(b, 'text') else '' 01/28 16:01
tjjh89017:try this " name_div.text or '' " 01/28 17:48
※ 編輯: NewSpec 來自: 36.224.204.173 (01/28 20:22)
NewSpec:謝R大, 都忘了還有hasattr()能用:) 01/28 20:22
NewSpec:t大你的做法一樣會出AttributeError喔@@" 01/28 20:23
darkgerm:data.get('name', '') 01/28 21:41
darkgerm: docs.python.org/2/library/stdtypes.html#dict.get 01/28 21:43
swpoker:這個應該就是aop拉 01/29 10:05
swpoker:getattr( object, name[, default]) 01/29 10:25
Reylod:樓上方法更符合semantic 01/30 11:49
NewSpec:getattr()不行喔, 它會直接跟object取name了 01/30 14:54
uranusjr:get 和 hasattr 是最佳解; 這邊應該是後者比較適合 01/30 15:00
uranusjr:倒過來(foo.name = dic['name'])才是用 get 比較好 01/30 15:01