1

它说

 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)
4

1 回答 1

1

我很确定第二个 if 应该有

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

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

然而,目前在 min-sec 以外的任何东西上它都会失败,因为 split 将没有任何有效的工作。

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

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

在第一行

如果您修复第二个“如果”,它也可以在 min:sec.. 上工作。但它也应该处理其他没有 : 或 - 也许只是按原样返回它们的令牌?

它也会在值上失败,例如<???>-<????>-<???>解包的值太多

Sanitize 正在寻找一个字符串来拆分其输入,一旦它决定使用拆分器,它会尝试使用它拆分字符串然后重建它。

但是,如果拆分器出现的次数更多,那么它就会失败,因为有太多的值需要解包。而默认的分隔,符是唯一不可能出现在此文本中的字符

于 2013-11-11T08:17:51.803 回答