Python ValueError:需要超过1个值才能解包、拆分行

Python ValueError:需要超过1个值才能解包、拆分行,python,Python,我有一个文件,在同一行上有问题和答案,我想将它们分开,并将它们附加到自己的空列表中,但不断出现以下错误: builtins.ValueError:需要超过1个值才能解包 questions_list = [] answers_list = [] questions_file=open('qanda.txt','r') for line in questions_file: line=line.strip() questions,answers =line.split(':

我有一个文件,在同一行上有问题和答案,我想将它们分开,并将它们附加到自己的空列表中,但不断出现以下错误:
builtins.ValueError:需要超过1个值才能解包

questions_list = []
answers_list = []

questions_file=open('qanda.txt','r')


for line in questions_file:
    line=line.strip()

    questions,answers =line.split(':')

    questions_list.append(questions)
    answers_list.append(answers)
line.split(“:”)
显然返回一个包含一个元素而不是两个元素的列表

因此,这就是为什么它不能将结果解压为
问题
答案
。例如:

>>> line = 'this-line-does-not-contain-a-colon'
>>> question, answers = line.split(':')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
>line='this-line-not-contain-a-colon'
>>>问题,答案=line.split(“:”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:需要超过1个值才能解包

这可能是因为在执行拆分时,没有
,因此函数只返回一个参数,而不是2个。这可能是由最后一行引起的,这意味着最后一行除了空格外什么都没有。像这样:

>>> a = '   '
>>> a = a.strip()
>>> a
''
>>> a.split(':')
['']
如您所见,从
.split
返回的列表只是一个空字符串。为了向您展示一个演示,这是一个示例文件:

我们尝试使用以下脚本(
val.txt
是上述文件的名称):

这给了我们:

Traceback (most recent call last):
a  b

c  d
  File "C:/Nafiul Stuff/Python/testingZone/28_11_13/val.py", line 3, in <module>

    a, b = line.split(':')
e  f
ValueError: need more than 1 value to unpack
尝试:

在Python 3中,您还可以执行其他操作:

question, *many_answers = line.split(':')
这看起来像:

temp = line.split(':')
question = temp[0]
many_answers = tuple(temp[1:])

发生这种情况的原因可能有几个,正如其他答案所述。空行,或者一行只有一个问题,没有冒号。如果要分析行,即使它们没有冒号(例如,如果某些行只有问题),可以将拆分更改为以下内容:

questions, answers, garbage = (line+'::').split(':', maxsplit=2)

这样,如果存在
问题
答案
的值,则这些值将被填充,如果原始文件中没有这些值,则这些值将为空。出于所有目的,请忽略变量
garbage

谢谢回复..我在文件中的第一行是以下命令显示可用内存量:free…我将很快尝试上面的代码,看看会发生什么,thanks@user3046660如果这个答案对你有帮助,请随意投票,如果它回答了您的问题,请单击此问题左侧的勾号接受它。
question, answers = line.split(':', maxsplit=1)
question, __, answers = line.partition(':')
question, *many_answers = line.split(':')
temp = line.split(':')
question = temp[0]
many_answers = tuple(temp[1:])
questions, answers, garbage = (line+'::').split(':', maxsplit=2)