我正试图从我拥有的一本编码手册中运行以下代码,但出现以下错误:
回溯(最近一次呼叫): 文件“ex20.py”,第3行,in 脚本,输入文件=argv ValueError:需要多个值才能解包
我已经创建了一个名为input\ u file的txt文件,并尝试了其他故障排除方法,但仍然会出现错误。你知道吗
from sys import argv
script, input_file = argv
def print_all(f):
print f.read()
def rewind(f):
f.seek(0)
def print_a_line(line_count, f):
print line_count, f.readline()
current_line = open(input_file)
print "First let's print the whole file:\n"
print_all(current_file)
print("Now lets rewind, kind of like a tape")
current_line = 1
print_a_line(current_line, current_line)
current_line = current_line + 1
print_a_line(current_line, current_file)
我希望它能按代码打印和工作。你知道吗
当您有“超过1个要解包的值”时,问题就会出现,这并不奇怪,这意味着
argv
小于您要分配给的变量数。你知道吗如果希望代码行正常工作,或者只通过
argv
访问argv
值而不进行赋值,则应确保argv
长度正好为2,但是,如果您确实希望保持原样,我建议在之前进行快速测试:以及之后的代码。但是您需要记住使用适当数量的arg运行代码,如下所示:
python <your_script_file>.py arg1
以这种方式,将
arg1
替换为要分配给input_file
的值,因为argv[0]
始终是正在运行的脚本/文件的名称。你知道吗我想你应该用
argumentParser
之类的库。你知道吗这个错误意味着
argv
没有“足够的值来解包”,也就是说,您试图通过执行称为destructuring的操作从argv
变量分配script
和input_file
,但是argv
只有一个值(脚本的名称)似乎您运行脚本时没有提供参数(输入文件)。 应按以下方式运行脚本:
根据[Python 3.Docs]: sys.argv:
因此,无论参数是否传递给脚本(或者脚本是否传递给解释器),它始终是一个列表(序列)。你知道吗
因为在左侧有两个变量(script和input\u file),列表还应该包含两个元素(根据错误文本,您只包含一个-这意味着没有给脚本提供任何参数)。你知道吗
在幕后,[Python 3.Docs]: More Control Flow Tools - Unpacking Argument Lists发生了。你知道吗
处理这种情况的一种常见方法是检查列表中有多少元素:
当从cmdline调用解释器(脚本)时,请确保还为输入文件传递一个值。你知道吗
@EDIT0:
从技术上讲,这超出了(原始)问题的范围。你知道吗
代码包含一堆无意义的部分(主要是因为混淆了当前的\u文件和当前的\u行——这表示命名错误)。我不打算坚持使用它们,而是按原样粘贴代码:
请注意,尽管您提到了使用Python 2,prints也将在Python 3中工作。你知道吗
相关问题 更多 >
编程相关推荐