[問題] 一行code in O'Reilly 深入淺出

看板Python作者 (Yen)時間9年前 (2016/02/22 23:40), 9年前編輯推噓1(109)
留言10則, 1人參與, 最新討論串1/2 (看更多)
各位大大好,小弟最近才剛接觸python 在O'Reilly的python 深入淺出的例外,額外處理的章節中, 他給了一段solution ================================= data.open('sketch.txt') for each_line in data: if not each_line.find(':') == -1: (role, line_spoken) = each_line.split(':',1) print(role, end='') print('said', end='') print(line_spoken, end='') data.close() ================================= 原本是沒有加上if statement,但會碰上ValueError: not enough values to unpack sketch.txt裡面有一行剛好有2個以上的「:」, 小弟不懂得也是這個if statement 為什麼加上這個if 就可以解決ValueError的問題? 這if的意思不是: 如果沒有在each_line中找不到':'的話,就繼續下面的code, 也就代表找到':',就會執行接下來的assign 跟 split? 這樣還是會碰到not enough values不是嗎? 這是我的疑問 先謝謝各位 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 119.14.67.30 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1456155621.A.B5E.html

02/22 23:57, , 1F
我覺得應該是這樣子,如果有錯請幫我指正
02/22 23:57, 1F

02/22 23:57, , 2F
如果沒有 if 判斷式的話,你的 each_line.split(':',1)
02/22 23:57, 2F

02/22 23:58, , 3F
這行在 each_line 的內容當中沒有 : 存在的狀況
02/22 23:58, 3F

02/22 23:58, , 4F
那麼這行指令回傳的結果只會是 [ each_line ]
02/22 23:58, 4F

02/22 23:59, , 5F
也就是說如果 each_line 是 '123',那回傳就是 ['123']
02/22 23:59, 5F

02/22 23:59, , 6F
可是回傳只有一個 val,你要把它存到 role, line_spoken
02/22 23:59, 6F

02/22 23:59, , 7F
那很顯然的就會有錯誤,我想這應該就是問題的原因
02/22 23:59, 7F

02/23 00:00, , 8F
所以在有 if statement 會先確認有 ':' 存在
02/23 00:00, 8F

02/23 00:00, , 9F
這樣子切出來就一定會回傳成 len = 2 的 list
02/23 00:00, 9F
剛剛有大大提醒是not enough value,抱歉我打錯了, A大你好如果是這個錯誤訊息,我是碰到可能裡面有一行是沒有:的情形嗎? ※ 編輯: ray60110 (42.73.196.202), 02/23/2016 11:21:36 ※ 編輯: ray60110 (42.73.196.202), 02/23/2016 11:47:47

02/23 13:44, , 10F
對,就是因為沒有 : 可以 split,所以 ret 只有 1 個
02/23 13:44, 10F
文章代碼(AID): #1MoolbjU (Python)
文章代碼(AID): #1MoolbjU (Python)