python - 太多的值需要解压

标签 python argv

我正在阅读《以困难的方式学习Python》, 在第 15 章我应该使用 import argv 分配变量和原始输入以获取增益 用户输入。脚本是:

from sys import argv 

script, filename, = argv

txt = open(filename)

print " Here's your file %r :" % filename
print  txt.read()

print " I'll also ask you to type it again: "

file_again = raw_input ("> ")

txt_again = open (file_again)

print txt_again.read ()

运行此脚本后,我收到错误,太多值无法解压。

文件“ex15.py”,第 3 行,位于 脚本,文件名=argv
值错误:太多值无法解压

最佳答案

只是一些提示...

from sys import argv  

script, filename, = argv 

在这里,您导入 argv 来访问命令行参数,然后期望它包含 2 个参数 - 脚本 (arg 0) 和要打印的文件名 (arg1)。尽管尾随逗号在语法上并非不正确,但它不是必需的,而且看起来有点奇怪。我通常将 argv 留在 sys 中,而不是将其拉入当前命名空间,但这是一个品味问题 - 它并没有真正的区别。我可能还会加入一些错误处理:

import sys

try:
    script, filename = sys.argv
except ValueError as e:
    raise SystemExit('must supply single filename as argument')
<小时/>
txt = (filename) 

print " Here's your file %r :" % filename 
print  txt.read() 

txt = (name) 在这里所做的就是使 txt 具有文件名的值。我相信您希望将 txt 制作为文件对象,以便您可以从中 .read() :

txt = open(filename)
print "Here's the file contents of:", filename
print txt.read()
<小时/>
print " I'll also ask you to type it again: "     
file_again = raw_input ("> ")     
txt_again = open (file_again)      
print txt.again.read ()

这里有open(),但是txt.again.read()应该是txt_again.read(),否则你会得到一个 AttributeError - 所以只需更改它就可以了。

或者,文件对象支持查找,因此您可以倒带文件(当您读完文件后,没有什么可以再读的了),方法是:

txt.seek(0)
print txt.read()

关于python - 太多的值需要解压,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12757015/

相关文章:

c - 将 argv[0] 设置为比当前分配的值更长的值

python - 如何使用 Python 计算文件中 "1 1"、 "-1 1"、 "1 -1"和 "-1 -1"的出现次数?

c - 更优雅地比较 argv 和字符串文字

python - 使用python逐行读取pdf文件

python - 正在定义的类型对象的类型提示

c - 警告 : format ‘%s’ expects argument of type ‘char *’ , 但参数 2 的类型为 ‘int’ 使用 argv

c - argv 输出错误?

python - python 中 'argv' 的确切术语是什么?

python - 为什么我在第二次运行中直接得到相同的结果而不在Python中运行随机函数?

python - PyQT4 QMenuBar 可见性由 MouseOver 切换