os.walk() ValueError:需要更多的值进行解包

9 投票
4 回答
6916 浏览
提问于 2025-04-17 17:35

好的,我正在使用一个叫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',
      ...])

撰写回答