os.walk() ValueError:需要更多的值进行解包
好的,我正在使用一个叫Bioloid Premium的人形机器人,但我的Mac OS X系统不识别它。于是我写了一个Python脚本,来检测我电脑上/dev/文件夹里的变化,因为在基于Linux的系统中,任何连接都会通过一个文件描述符来进行引用。我的代码应该是可以工作的,不过在给os.walk(top)返回的值赋值给三个变量时,我遇到了一个ValueError错误。有没有人知道我该怎么解决这个问题?我以前用过这个函数,没遇到过任何麻烦。顺便说一下,我的脚本写得很粗糙,大约花了我5分钟左右。
代码:
root_o, dir_o, files_o = os.walk(top)
错误信息如下:
Traceback (most recent call last):
File "detectdevs.py", line 15, in <module>
findDevs()
File "detectdevs.py", line 11, in findDevs
root_o, dir_o, files_o = os.walk(top)
ValueError: need more than 1 value to unpack
我在StackOverflow上搜索过,看到的ValueError问题都没有提到os.walk()这个函数。
4 个回答
3
试试这个
for root_o, dir_o, files_o in os.walk(top)
print root_o, dir_o, files_o
os.walk
是一个生成器,你需要对它进行遍历。
7
你需要对 os.walk()
进行 遍历:
for root_o, dir_o, files_o in os.walk(top):
或者先把这个遍历器存起来,然后再循环:
walker = os.walk(top)
for root_o, dir_o, files_o in walker:
这个可调用的返回值是一个生成器函数,只有当你对它进行遍历(比如用 for
循环或者调用 next()
来获取下一个值)时,它才会返回包含三个值的元组。
23
os.walk
返回的是一个迭代器,它会生成三个元素的元组,而不是一个单独的三个元素的元组。
for root, dirs, files in os.walk(top):
# do stuff with root, dirs, and files
In [7]: os.walk('.')
Out[7]: <generator object walk at 0x1707050>
In [8]: next(os.walk('.'))
Out[8]:
('.',
['.vim',
'.git',
...],
['.inputrc',
...])