[問題] 請問該如何精簡的撰寫檢查參數程式碼?

看板Python作者 (新規格)時間12年前 (2013/01/28 15:53), 編輯推噓4(409)
留言13則, 6人參與, 最新討論串1/1
大家好 小弟我現在正在撰寫一個網頁的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

01/28 16:01, , 1F
try hasattr
01/28 16:01, 1F

01/28 16:01, , 2F
a = b.text if hasattr(b, 'text') else ''
01/28 16:01, 2F

01/28 17:48, , 3F
try this " name_div.text or '' "
01/28 17:48, 3F
※ 編輯: NewSpec 來自: 36.224.204.173 (01/28 20:22)

01/28 20:22, , 4F
謝R大, 都忘了還有hasattr()能用:)
01/28 20:22, 4F

01/28 20:23, , 5F
t大你的做法一樣會出AttributeError喔@@"
01/28 20:23, 5F

01/28 21:41, , 6F
data.get('name', '')
01/28 21:41, 6F

01/28 21:43, , 7F
docs.python.org/2/library/stdtypes.html#dict.get
01/28 21:43, 7F

01/29 10:05, , 8F
這個應該就是aop拉
01/29 10:05, 8F

01/29 10:25, , 9F
getattr( object, name[, default])
01/29 10:25, 9F

01/30 11:49, , 10F
樓上方法更符合semantic
01/30 11:49, 10F

01/30 14:54, , 11F
getattr()不行喔, 它會直接跟object取name了
01/30 14:54, 11F

01/30 15:00, , 12F
get 和 hasattr 是最佳解; 這邊應該是後者比較適合
01/30 15:00, 12F

01/30 15:01, , 13F
倒過來(foo.name = dic['name'])才是用 get 比較好
01/30 15:01, 13F
文章代碼(AID): #1H1YvxJb (Python)
文章代碼(AID): #1H1YvxJb (Python)