作者octantis (@.@)
看板Python
标题Re: [问题] 一行code in O'Reilly 深入浅出
时间Tue Feb 23 00:37:56 2016
※ 引述《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://webptt.com/cn.aspx?n=bbs/Python/M.1456159079.A.7B8.html
1F:推 ray60110: 啊 真的我打错了,是not enough value to unpack 02/23 10:32
2F:推 ray60110: 错误讯息是:ValueError: not enough value to unpack(e 02/23 11:42
3F:→ ray60110: xpected 2 got 1) 02/23 11:42
4F:推 aweimeow: XD 02/23 13:43
5F:推 ray60110: 谢谢大大 已回家复习完毕 :) 02/23 22:00