Python 与输入文件相关的错误,ValueError:需要超过1个值才能解包
我正试图从我拥有的一本编码手册中运行以下代码,但出现以下错误: 回溯(最近一次呼叫最后一次): 文件“ex20.py”,第3行,在 脚本,输入文件=argv ValueError:需要超过1个值才能解包 我已经创建了一个名为input_file的txt文件,并尝试了其他故障排除方法,但仍然会出现错误Python 与输入文件相关的错误,ValueError:需要超过1个值才能解包,python,Python,我正试图从我拥有的一本编码手册中运行以下代码,但出现以下错误: 回溯(最近一次呼叫最后一次): 文件“ex20.py”,第3行,在 脚本,输入文件=argv ValueError:需要超过1个值才能解包 我已经创建了一个名为input_file的txt文件,并尝试了其他故障排除方法,但仍然会出现错误 from sys import argv script, input_file = argv def print_all(f): print f.read() def rewi
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)
我希望它能按编码方式打印和工作。此错误意味着
argv
没有“足够的值来解包”,即您试图通过调用argv
变量从argv
分配script
和input\u文件,但argv
只有一个值(脚本名称)
您运行脚本时似乎没有提供参数(输入文件)。
应按以下方式运行脚本:
python ex20.py'path/to/input\u文件'
脚本,输入文件=argv
根据:
传递给Python脚本的命令行参数列表
因此,无论参数是否传递给脚本(或者脚本是否传递给解释器),它始终是一个列表(序列)
因为在左侧有两个变量(脚本和输入文件),列表还应该包含两个元素(根据错误文本,您的列表只包含一个元素,这意味着没有为脚本提供任何参数)
在幕后发生的事情
处理这种情况的一种常见方法是检查列表中有多少元素:
如果len(argv)!=2:
raise SystemExit(“脚本应该只接收一个参数!”)
当您从cmdline调用解释器(脚本)时,请确保也为输入文件传递一个值
@EDIT0:
从技术上讲,这超出了(原始)问题的范围
这段代码包含一堆无意义的部分(主要是因为混淆了当前的_文件和当前的_行,这表示命名错误)。我不打算坚持这样做,而是按照应该的样子粘贴代码:
导入系统
def打印全部(f):
打印(f.read())
def倒带(f):
f、 搜索(0)
def打印行(行号,f):
打印(行号,f.readline())
_,输入文件名称=sys.argv
输入文件=打开(输入文件名)
打印(“首先,让我们打印整个文件:\n”)
全部打印(输入文件)
打印(“现在让我们倒带,有点像磁带:\n”)
倒带(输入_文件)
当前线路=1
打印一行(当前行,输入文件)
当前_线+=1
打印一行(当前行,输入文件)
请注意,尽管您提到使用Python 2,但打印也可以在Python 3中使用。当您有“超过1个要解包的值”时,问题就会出现,这并不奇怪,这意味着
argv
小于您要分配的变量数
如果您想让代码行正常工作,您应该确保argv
长度正好为2,或者只需通过argv
访问argv
值,而无需赋值,但是,如果您确实想保持原样,我建议您先进行快速测试:
if len(argv) != 2:
exit()
以及随后的其他代码。但您需要记住使用适当数量的args运行代码,如下所示:
python.py arg1
这样,将arg1
替换为要分配给input_file
的值,因为argv[0]
始终是您正在运行的脚本/文件的名称
我想您应该如何使用像
argumentParser
之类的库。输入文件是否作为命令行参数提供?请检查。您是如何运行脚本的?您向它传递了哪些参数?为什么要将脚本和输入文件设置为刚导入的包我的意思是argv返回一个列表,您需要定义您设置为什么。。。script,input_file=argv[0],argv[1]我假设脚本是代码本身,而input_文件是包含代码/.py脚本的同一文件中的文本文件。我通过终端aka“python ex20.py”运行它,我设置它是因为这本书告诉我要这么做。bash-4.3$python ex20.py input_file.txt首先让我们打印整个文件:Traceback(最后一次调用):文件“ex20.py”,第18行,在print_all(当前_文件)中NameError:name'current_file'未定义我使用的是python 2,这是我在尝试提供这两个参数时遇到的错误。我使用的是python 2,当我提供请求的2个参数时出现此错误:bash-4.3$python ex20.py input_file.txt首先让我们打印整个文件:回溯(最后一次调用):文件“ex20.py”,第18行,全部打印(当前文件)名称错误:名称“当前文件”不正确defined@Stalin这回答了你的问题吗。不是真的,但我正在读一本python2.7的书,并决定放弃它,因为3.xx是现代版本。当我可以学习3.xx时,学习2.7是没有用的,只要“反向学习”我可能需要修补的任何代码或将来可能出现的任何情况。请注意,你不必接受答案,除非它解决了你的问题。嗯,什么不起作用?让我知道,这样我可以修改(改进)答案。无论如何(我发布的代码),它应该可以在Python3和Python2上工作(因为它解决了问题中的问题和其他几个问题)。