我对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。
很显然这段代码有问题,我无法确定它是什么。 任何帮助将不胜感激。
答案 0 :(得分:0)
为了后代,请在答案中记录下来。简而言之,所描述的直接问题不仅仅在于脚本本身,还在于如何调用它。没有给出位置参数,但是应该为input_encoding
和error
分配两个位置。
此行:
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窗口。从那里,(我猜),您已将文本复制到记事本文件中并保存。它。 我也这样做,并得到相同的错误。然后,我直接从指示的链接下载了文件(右键单击文件,然后选择目标另存为)。保存后,该文件将按原样保存文件,然后程序开始运行。