-->

os.walk()ValueError异常:需要大于1点的值更解压(os.walk() ValueE

2019-07-20 19:10发布

好吧,我用Bioloid高级人形机器人的工作,和Mac OS X将无法识别它。 所以我写了一个Python脚本,因为一个基于Linux的系统上的任何连接仍然给出通过文件描述符的引用来检测我的/ dev /文件夹的变化。 我的代码应该工作,但是,分配三个可变来,我得到一个ValueError由os.walk(上)返回的值时。 任何人都知道我是如何解决这个问题? 我已经在过去使用此功能,它并没有给我带来任何麻烦。 我的脚本顺便说一句很粗糙,我写了大约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

我四处搜寻计算器,并没有一个ValueError异常问题,我看到引用os.walk()函数。

Answer 1:

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',
      ...])


Answer 2:

您需要遍历 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()的迭代器),它产生的3值的元组。



Answer 3:

试试这个

for root_o, dir_o, files_o in os.walk(top)
    print root_o, dir_o, files_o

os.walk是一台发电机,你需要遍历它。



Answer 4:

也许更重要的是有用的,这里就是它说:“1个多值解压”。

看,蟒蛇,你“解压”的元组 (或列表,因为它可能是)到相同数量的变量:

a, b, c = (1, 2, 3)

有迹象表明,转了几个不同的错误:

>>> a, b, c = (1, 2, 3, 4, 5, 6)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack

>>> a, b, c = (1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 2 values to unpack

具体而言,最后一个错误是错误的你得到的类型。 os.walk()返回一个迭代的,即一个单一的值。 您需要强制这个迭代产生之前就开始给你的值,可以解压!

这是)os.walk的点(; 它迫使你遍历它,因为它试图走! 因此,下面的片段可能为你工作好一点。

for root_o, dir_o, files_o in os.walk(top):
    make_magic_happen(root_o, dir_o, files_o)


文章来源: os.walk() ValueError: need more than 1 value to unpack