Python值解包

2024-10-01 11:26:19 发布

您现在位置: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

我得到这个错误:

need more than 1 value to unpack

另外,我知道这是一个愚蠢的方法,任何建议将不胜感激。在

编辑:

这对我来说真是太傻了,我完全忘记了操作系统列表目录(dir)对我来说这是一个更合理的函数。如果你使用选择的答案,它会清除我遇到的上述问题,但不会得到我想要的结果。在


Tags: 文件topathdjango函数用户应用程序request
2条回答

根据您对Adam Rosenfield的评论,这是另一种获得手术室步行(方向)。在

path, dirs, files = [_ for _ in os.walk('/home/damon/walktemp/%s' % path)][0]

这是你的walktoo(dir)功能的替代品。在

另外,请确保render_to_response的第二个参数使用您创建的变量:

^{pr2}$

path是一个字符串,所以说path[0]。。。path[1]。。。path[2]您实际上是说要使用字符串的第一个、第二个和第三个字符。在

path, dirs, files = walktoo('/home/damon/walktemp/%s' % path)

在这一行中,您期望walktoo返回一个由三个值组成的元组,然后将这些值解压为pathdirs和{}。但是,您的walktoo函数是一个生成器对象:调用walktoo()会产生一个值,即生成器。您必须在生成器上调用next()(或者通过对它进行某种迭代来隐式地调用它)才能得到您真正想要的,即它生成的3元组。在

我不太清楚您要做什么您的walkdeep()函数的编写方式就像它只想使用walktoo()返回的第一个值一样。你是不是想做这样的事?在

^{pr2}$

相关问题 更多 >