os.walk()ValueError:需要多于1个值才能解包

Ech*_*nal 7 python scripting os.walk

好吧,我正在使用Bioloid Premium人形机器人,而Mac OS X将无法识别它.所以我写了一个Python脚本来检测我的/ dev /文件夹中的更改,因为基于Linux的系统上的任何连接仍然通过文件描述符给出引用.我的代码应该工作,但是,当将三个变量分配给os.walk(顶部)返回的值时,我得到一个ValueError.有谁知道如何解决这个问题?我过去曾经使用过这个功能,并没有给我任何麻烦.我的剧本非常粗糙,我写了大约5分钟左右.

码:

root_o, dir_o, files_o = os.walk(top)
Run Code Online (Sandbox Code Playgroud)

错误如下.

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
Run Code Online (Sandbox Code Playgroud)

我确实搜索了stackoverflow,我看到的所有ValueError问题都没有引用os.walk()函数.

Pav*_*sov 21

os.walk 返回一个产生三元组的迭代器,而不是三元组:

for root, dirs, files in os.walk(top):
    # do stuff with root, dirs, and files
Run Code Online (Sandbox Code Playgroud)

 

    In [7]: os.walk('.')
    Out[7]: <generator object walk at 0x1707050>

    In [8]: next(os.walk('.'))
    Out[8]:
    ('.',
     ['.vim',
      '.git',
       ...],
     ['.inputrc',
      ...])
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 7

您需要遍历os.walk():

for root_o, dir_o, files_o in os.walk(top):
Run Code Online (Sandbox Code Playgroud)

或先存储迭代器,然后循环:

walker = os.walk(top)
for root_o, dir_o, files_o in walker:
Run Code Online (Sandbox Code Playgroud)

callable的返回值是一个生成器函数,只有当你遍历它(使用for循环或通过调用next()迭代器)时才会产生3值元组.