值错误:需要多个值进行解包

0 投票
2 回答
11522 浏览
提问于 2025-04-16 21:29

我有一段代码是用来处理一个大文本文件中的字符串的。当我运行这段代码时,出现了一个错误信息:“ValueError: 需要更多的值来解包”。于是我把这一行中的整数改成了0、1和2:

    _, k = line.split('\t',1)

如果我输入2,它就说“解包的值太多了”。我还尝试按照下面的方式定义每个变量:

    f = []
    _ = []
    k = []
    x = []
    i = 0

.. 但这也没有成功。

这是代码:

    # Opens each file to read/modify
    infile='110331_HS1A_1_rtTA.result'
    outfile='2.txt'

    #import Regex
    import re

    with open (infile, mode='r', buffering=-1) as in_f, open (outfile, mode='w', buffering=-1) as out_f:
        f = (i for i in in_f if i.rstrip())
        for line in f:
            _, k = line.split('\t',1)
            x = re.findall(r'^1..100\t([+-])chr(\d+):(\d+)\.\.(\d+).+$',k)
            if not x:
                continue
            out_f.write(' '.join(x[0]) + '\n')

这是错误信息:

   Traceback (most recent call last):
     File "C:\DB\Stack Overflow\test5.py", line 11, in <module>
       _, k = line.split('\t',1)
   ValueError: need more than 1 value to unpack

感谢那些愿意帮助我或教我的人 :)

2 个回答

2

你碰到了一个没有包含 \t 的行,所以结果列表里只有一个元素。

1

哦,那是我在另一个问题上写的代码。你本可以在那里问我...

因为你给的文件里没有任何不为空的行是没有tab的,所以我以为不会有问题。

你可以通过修改这一行来检查是否有制表符:

f = (i for i in in_f if i.rstrip())

变成

f = (i for i in in_f if '\t' in i.rstrip())

这样你就能去掉空行和那些没有'\t'的行。要查看你的文件中出现问题的行,你可以使用(原始代码):

try:
    _, k = line.split('\t',1)
except:
    print(line)

顺便说一下,_通常用来表示在某些操作中我们不关心的东西。它可以用任何名字。

ATCGATTTCG....ATGC    1..100blablabla
       ^                     ^
 useless part (_)     important one (k)

撰写回答