作者ray60110 (Yen)
看板Python
标题[问题] 一行code in O'Reilly 深入浅出
时间Mon Feb 22 23:40:17 2016
各位大大好,小弟最近才刚接触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://webptt.com/cn.aspx?n=bbs/Python/M.1456155621.A.B5E.html
1F:推 aweimeow: 我觉得应该是这样子,如果有错请帮我指正02/22 23:57
2F:→ aweimeow: 如果没有 if 判断式的话,你的 each_line.split(':',1)02/22 23:57
3F:→ aweimeow: 这行在 each_line 的内容当中没有 : 存在的状况02/22 23:58
4F:→ aweimeow: 那麽这行指令回传的结果只会是 [ each_line ]02/22 23:58
5F:→ aweimeow: 也就是说如果 each_line 是 '123',那回传就是 ['123']02/22 23:59
6F:→ aweimeow: 可是回传只有一个 val,你要把它存到 role, line_spoken02/22 23:59
7F:→ aweimeow: 那很显然的就会有错误,我想这应该就是问题的原因02/22 23:59
8F:→ aweimeow: 所以在有 if statement 会先确认有 ':' 存在02/23 00:00
9F:→ aweimeow: 这样子切出来就一定会回传成 len = 2 的 list02/23 00:00
刚刚有大大提醒是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
10F:→ aweimeow: 对,就是因为没有 : 可以 split,所以 ret 只有 1 个 02/23 13:44