Why am i getting ValueError: too many values to unpack -Python

Why am i getting ValueError: too many values to unpack -Python

以下代码抛出 ValueError:要解压的值太多

if remote_folder is not None:
            for directory_name, files in os.walk(file_path):
                for filename in files:
                    remote_folder.key = os.path.join(
                        remote_file_path,
                        directory_name,
                        filename)
                    file_size_uploaded = remote_folder.set_contents_from_filename(  # noqa
                        os.path.join(directory_name, filename), replace=True)
            return False if file_size_uploaded == 0 else True 

此方法正在尝试将文件上传到 S3 存储桶

谁能解释为什么以及如何避免?

这个:

for directory_name, files in os.walk(file_path):

os.walk returns 3 元组,因此在尝试将 3 元组分配给 2 元组时会引发异常。

使用:

for root, dirs, files in os.walk(file_path):

os.walk 上的文档:https://docs.python.org/2/library/os.html#os.walk

根据 os.walk 的文档,它产生一个 3 元组。随着

for directory_name, files in os.walk(file_path):

您正在尝试将 3 元组解包为 2 个变量,因此有 "too many values to unpack"。您需要向该行添加第三个变量,然后您的代码应该 运行.

由于 os.walk returns 一个 3 元组并且您似乎对目录名没有任何用处,您可以代替原来的 for directory_name, files in os.walk(file_path):,执行以下操作:

这个:

# This style makes it clear that you aren't using the 
# second (dirnames) variable.
for directory_name, _, files in os.walk(file_path):

或:

# This slices the part that you need
for directory_name, files in os.walk(file_path)[::2]:

它更明确地表明您 根本没有使用 目录名。