You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用requests库实现的download(url, dir)文件下载函数运行报错:AttributeError: module 'collections' has no attribute 'MutableMapping'

解决 AttributeError: module 'collections' has no attribute 'MutableMapping' 问题并修复下载函数

首先,你的错误根源很明确:你使用的requests版本太旧,不兼容Python 3.10+。在Python 3.10中,collections.MutableMapping已经被移动到collections.abc.MutableMapping,而老版本的requests还在引用旧的路径,所以触发了这个属性错误。

第一步:更新requests到兼容版本

打开终端运行以下命令:

pip install --upgrade requests

这会把requests更新到支持Python 3.10+的最新版本,直接解决这个属性错误。

第二步:修复你的download函数的其他问题

即使解决了requests的问题,你的当前代码还有两个小问题会导致运行失败:

  1. 打印信息的逻辑错误:你写的是Dowloading file to '{url}' in '{dir}',语义颠倒了(应该是从URL下载到目录),还存在单词拼写错误(Dowloading → Downloading)
  2. open(dir, "wb")的问题:如果dir是一个目录路径,直接用open打开目录会报错,你需要拼接出完整的文件名(可以从URL中提取,或者让用户明确传入)

修复后的代码如下:

import requests
from os.path import join

def download(url: str, save_dir: str):
    # 修复拼写和逻辑错误
    print(f"Downloading file from '{url}' to '{save_dir}'...")
    # 发送请求并允许重定向
    r = requests.get(url, allow_redirects=True)
    # 从URL末尾提取文件名
    filename = url.split('/')[-1]
    # 拼接完整的文件保存路径
    save_path = join(save_dir, filename)
    # 使用上下文管理器确保文件正确关闭
    with open(save_path, "wb") as f:
        f.write(r.content)
    # 修复拼写错误
    print("Download complete!")

这里额外做了这些优化:

  • 重命名参数dir为save_dir,避免和Python内置的dir()函数冲突
  • 使用with open()上下文管理器,避免文件未正确关闭导致的资源泄漏
  • 自动从URL中提取文件名,无需用户额外传入,简化调用逻辑

测试验证

更新requests并替换代码后,运行你的脚本应该就能正常下载文件到指定目录了。比如调用download("https://example.com/file.pdf", "./downloads"),就会把目标文件保存到当前目录下的downloads文件夹里。

内容的提问来源于stack exchange,提问作者Tommy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 18:47:35