为什么在尝试拆分一行输入并分配给多个变量时会出现 ValueError?

2024-01-03

我尝试了一些像这样的代码来从文件中读取问题和答案对:

questions_list = []
answers_list = []

with open('qanda.txt', 'r') as questions_file:
    for line in questions_file:
        line = line.strip()
        questions, answers = line.split(':')
        questions_list.append(questions)
        answers_list.append(answers)

但有时我会遇到例外questions, answers = line.split(':')行,上面写着:

(Python 2.x)builtins.ValueError: need more than 1 value to unpack

(Python 3.x)ValueError: not enough values to unpack (expected 2, got 1)

或者,相反的问题:ValueError: too many values to unpack (expected 2)

为什么会出现这种情况?我该如何解决或解决该问题?


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

>>> a = '   '
>>> a = a.strip()
>>> a
''
>>> a.split(':')
['']

正如你所看到的,列表返回自.split只是一个空字符串。因此,为了向您展示一个演示,这是一个示例文件:

a: b
c: d
e: f

g: h

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

with open('val.txt', 'r') as v:
    for line in v:
        a, b = line.split(':')
        print a, b

这给了我们:

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

当尝试通过调试器查看这个时,变量line变成\n,并且你不能分割它。

然而,一个简单的逻辑修正就可以纠正这个问题:

with open('val.txt', 'r') as v:
    for line in v:
        if ':' in line:
            a, b = line.strip().split(':')
            print a, b
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在尝试拆分一行输入并分配给多个变量时会出现 ValueError? 的相关文章

随机推荐