Re: [問題] 一行code in O'Reilly 深入淺出
※ 引述《ray60110 (Yen)》之銘言:
: 各位大大好,小弟最近才剛接觸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: too many values to unpack
: sketch.txt裡面有一行剛好有2個以上的「:」,
: 小弟不懂得也是這個if statement
: 為什麼加上這個if 就可以解決ValueError的問題?
: 這if的意思不是:
: 如果沒有在each_line中找不到':'的話,就繼續下面的code,
: 也就代表找到':',就會執行接下來的assign 跟 split?
: 這樣還是會碰到too many values不是嗎?
: 這是我的疑問
: 先謝謝各位
罰你再去重跑一次檔案,連錯誤訊息都給錯
你給的程式碼有沒有if都不會出現too many values to unpack
----------------------------------------------------------------------------
重點是這行:(role, line_spoken) = each_line.split(':',1)
each_line.split(':',1)會把each_line分成兩部分x, y分別丟給role, line_spoken
兩種情況:
1. ':'數目大於或等於一個,則each_line會變成兩部分,剛剛好
2. ':'數目小於一個,也就是不存在,each_line不會分割直接丟給role, line_spoken
問題each_line只有一個怎麼丟給兩個參數?
所以會跑'need more than 1 value to unpack'
你的if就是確保':'的數目不小於一個
-----------------------------------------------------------------------------
什麼時候會出現too many values to unpack?
就是each_line分割的塊數大於你要傳的參數
意即each_line.split(':') 分出x, y, z,... 但你只給兩個參數role, line_spoken
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.209.47
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1456159079.A.7B8.html
推
02/23 10:32, , 1F
02/23 10:32, 1F
推
02/23 11:42, , 2F
02/23 11:42, 2F
→
02/23 11:42, , 3F
02/23 11:42, 3F
推
02/23 13:43, , 4F
02/23 13:43, 4F
推
02/23 22:00, , 5F
02/23 22:00, 5F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章