Python 值解包错误
我正在用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
我遇到了这个错误:
需要超过1个值来解包
另外,我知道这样做很傻,任何建议都很欢迎。
编辑:
其实我真的是太傻了,我完全忘记了os.listdir(dir)这个函数,它对我来说要合理得多。如果你使用选中的答案,它解决了我之前遇到的问题,但结果却不是我想要的。
2 个回答
1
根据你对 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]
时,其实是在说使用这个字符串的第一个、第二个和第三个字符。
7
path, dirs, files = walktoo('/home/damon/walktemp/%s' % path)
在这一行代码中,你希望 walktoo
返回一个包含三个值的元组,然后把这三个值分别放到 path
、dirs
和 files
里。不过,你的 walktoo
函数其实是一个生成器对象:调用 walktoo()
只会得到一个生成器,而不是你想要的三个值。你需要对这个生成器使用 next()
,或者通过某种方式进行迭代,才能得到你真正想要的三个值的元组。
我不太明白你想要做什么——你的 walkdeep()
函数看起来只想使用 walktoo()
返回的第一个值。你是不是想做这样的事情呢?
for path, dirs, files in walktoo(...):
# do something