Python3-“ ValueError:没有足够的值可解包(预期3,得到1)”

时间:2018-09-03 21:46:36

标签: python-3.x

我对Python和整体编程非常陌生,因此,如果我似乎很难理解您,请忍受我。 我正在阅读“以艰难的方式学习Python 3”,但练习23遇到了麻烦。

我将代码复制到了文本编辑器中,并最终得到了这样的结果:

import sys

script, input_encoding, error = sys.argv


def main(language_file, encoding, errors):
    line = language_file.readline()

    if line:
        print_line(line, encoding, errors)
        return main(language_file, encoding, errors)


def print_line(line, encoding, errors):
    next_lang = line.strip()
    raw_bytes = next_lang.encode(encoding, errors=errors)
    cooked_string = raw_bytes.decode(encoding, errors=errors)

    print(raw_bytes, "<====>", cooked_string)


languages = open("languages.txt", encoding = "utf-8")

main(languages, input_encoding, error)

当我尝试运行它时,出现以下错误消息:

Traceback (most recent call last):
  File "pag78.py", line 3, in <module>
    script, input_encoding, error = sys.argv
ValueError: not enough values to unpack (expected 3, got 1)

在这种情况下,我很难理解。

我搜索了该练习,以将其与书本页面以外的内容进行比较,如果我没有丢失任何内容,则可以正确地进行复制。例如,有关同一练习,请参见此代码here

很显然这段代码有问题,我无法确定它是什么。 任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

为了后代,请在答案中记录下来。简而言之,所描述的直接问题不仅仅在于脚本本身,还在于如何调用它。没有给出位置参数,但是应该为input_encodingerror分配两个位置。

此行:

script, input_encoding, error = sys.argv

获取(列表)传递给脚本的参数。 (sys.argv)并将其解压缩,即将其项目的值赋给左侧的变量。假设要解压缩的变量数与右侧列表中的项目数相对应。

sys.argv包含被调用脚本的名称以及传递给它的附加参数,每个参数只有一个。

这种构造实际上是确保提供正确数量的预期参数的非常简单的方法,即使这样导致的错误可能不是最明显的。

稍后,您当然应该签出argparse来处理传递的参数。舒适且功能强大。

答案 1 :(得分:0)

运行程序时,必须在命令行中输入参数。这样运行程序:

python ex23.py utf-8 strict

将所有内容复制并粘贴到您的终端中以运行代码。像其他人一样,本练习使用argv。稍后,它会在本章中说明。我认为您在获得解释之前就已经着手运行代码。

答案 2 :(得分:0)

几周前,我开始阅读LPTHW。我遇到了与“ micaldras”相同的错误。出现错误是因为您可能单击了文件链接并打开了IEExplorer窗口。从那里,(我猜),您已将文本复制到记事本文件中并保存。它。 我也这样做,并得到相同的错误。然后,我直接从指示的链接下载了文件(右键单击文件,然后选择目标另存为)。保存后,该文件将按原样保存文件,然后程序开始运行。