我的Python代码出了什么问题? Head First Python中的示例

时间:2013-11-11 08:13:46

标签: python

它说

 james.append(sanitize(each_item))  
 (mins, secs) = time_string.split(splitter)

 need more than 1 value to unpack

怎么了?谢谢。这是Head First Python的例子

james = []
def sanitize(time_string):
    if '-' in time_string:
        splitter = '-'
    elif ':' in time_string:
        splitter = '-'        
    else:
        splitter = ','
    (mins, secs) = time_string.split(splitter)
    return(mins + '.' + secs)

with open('james.txt', 'r') as jaf:
    data = jaf.readline()
    james_data = data.strip().split(',')

for each_item in james_data:
    james.append(sanitize(each_item))
sort(james)
print(james)

1 个答案:

答案 0 :(得分:1)

我很确定第二个应该有

elif ':' in time_string:
    splitter = ':'    

基本上它会查找类型的字符串:min:sec或min-sec或min,sec并尝试将它们转换为min.sec

然而,目前在其他任何事情上都是min-sec它会失败,因为split不会有任何有效的工作。

所以它看起来只适用于具有以下对的csv文件:

 min-sec, min-sec, min-sec,

在第一行

如果你修复第二个'if'它也可以在min:sec ..上工作但是它也应该处理其他没有的标记:或者 - 或者只是按原样返回它们?

对于诸如<???>-<????>-<???>之类的值,如果解压缩的值太多,它也会失败

Sanitize正在寻找一个字符串来分割它的输入,一旦它决定分割器它试图用它分割字符串然后重建它..

然而,如果拆分器出现的次数超过一次,则会失败,因为可能会有值解压缩。默认分割器是,,它是唯一不可能出现在此文本中的字符