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

作者: ray60110 (Yen)   2016-02-22 23:40:17
各位大大好,小弟最近才剛接觸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不是嗎?
這是我的疑問
先謝謝各位
作者: aweimeow (喵喵喵喵 ヽ( ・∀・)ノ)   2016-02-22 23:57:00
我覺得應該是這樣子,如果有錯請幫我指正如果沒有 if 判斷式的話,你的 each_line.split(':',1)這行在 each_line 的內容當中沒有 : 存在的狀況那麼這行指令回傳的結果只會是 [ each_line ]也就是說如果 each_line 是 '123',那回傳就是 ['123']可是回傳只有一個 val,你要把它存到 role, line_spoken那很顯然的就會有錯誤,我想這應該就是問題的原因所以在有 if statement 會先確認有 ':' 存在這樣子切出來就一定會回傳成 len = 2 的 list

Links booklink

Contact Us: admin [ a t ] ucptt.com