[英]Python value unpacking error
我正在使用Django构建每用户文件浏览/上传应用程序,并且在运行此功能时
def walkdeep(request, path):
path, dirs, files = walktoo('/home/damon/walktemp/%s' % path)
return render_to_response('walk.html', {
'path' : path[0],
'dirs' : path[1],
'files' : path[2],
}, context_instance=RequestContext(request))
def walktoo(dir):
for path, dirs, files in os.walk(dir):
yield path, dirs, files
print path, dirs, files
我收到此错误:
need more than 1 value to unpack
另外,我知道这是一种愚蠢的方式,任何建议将不胜感激。
编辑:
这对我来说实际上是很愚蠢的,我完全忘记了os.listdir(dir),这对于我来说是一个更合理的功能。 如果使用选定的答案,它将清除我遇到的上述问题,但不会消除我想要的结果。
path, dirs, files = walktoo('/home/damon/walktemp/%s' % path)
在这一行中,您期望walktoo
返回三个值的元组,然后将其解压缩为path
, dirs
和files
。 但是, walktoo
函数是一个生成器对象:调用walktoo()
生成一个值,即生成器。 您必须在生成器上调用next()
(或通过对其进行某种形式的迭代来隐式调用)以获取实际所需的内容,即生成的3元组。
我尚不清楚您要做什么-您的walkdeep()
函数的编写就像只想使用walktoo()
返回的第一个值walktoo()
。 你是说要做这样的事吗?
for path, dirs, files in walktoo(...):
# do something
根据您对Adam Rosenfield的评论,这是获取一层os.walk(dir)的另一种方法。
path, dirs, files = [_ for _ in os.walk('/home/damon/walktemp/%s' % path)][0]
这是walktoo(dir)函数的替代方法。
另外,请确保您的render_to_response
的第二个参数使用您创建的变量:
{'path' : path,
'dirs' : dirs,
'files' : files,}
path
是一个字符串,因此说出path[0]
... path[1]
... path[2]
实际上是在说使用字符串的第一个,第二个和第三个字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.