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

Django4.0+Python3.9下webpack_loader报regex未定义TypeError如何解决

问题诱因

该报错和Python 3.9版本本身无关,执行brew upgrade python无法解决问题,核心原因是当前环境安装的django-webpack-loader版本过旧,未适配Django 4.0版本:

  • 旧版本(0.7.x及更早稳定版)依赖Django已废弃的内部接口,自动将配置中IGNORE字段的规则预编译为正则对象,Django 4.0移除了该内部接口后,self.config['ignores']中存储的是未编译的原始字符串、甚至默认空值,并非预期的正则实例,调试时看到的「regex对象未定义」就是迭代时拿到的元素类型不符合预期导致的。
  • 旧版本django-webpack-loader仅适配旧版webpack-bundle-tracker输出的字符串格式chunk列表,新版构建工具输出的chunk为包含路径、hash信息的字典对象,传入正则match()方法时,就会抛出TypeError: expected string or bytes-like object报错。
修复方案

可根据项目实际情况选择以下任意一种方案修复:

  • 推荐方案:升级依赖到兼容版本
    直接将django-webpack-loader升级至1.0.0及以上正式版,该版本已完成Django 4.0适配,执行命令:
    pip install --upgrade django-webpack-loader>=1.0.0
    
    升级后需同步将前端侧的webpack-bundle-tracker升级至1.0.0+版本,保证两端bundle数据格式匹配,原有配置无需大幅调整即可正常运行。
  • 临时兼容方案:手动补丁修复(无法升级依赖时使用)
    定位到报错的python3.9/site-packages/webpack_loader/loader.py文件,重写filter_chunks函数逻辑,手动补全正则编译、chunk类型兼容处理,替换后的代码如下:
    import re
    def filter_chunks(self, chunks):
        filtered_chunks = []
        # 手动编译忽略规则,兼容未自动预编译的场景
        compiled_ignores = []
        for pattern in self.config.get('ignores', []):
            if isinstance(pattern, str):
                compiled_ignores.append(re.compile(pattern))
            else:
                compiled_ignores.append(pattern)
    
        for chunk in chunks:
            # 兼容chunk为字典对象的场景,提取文件名字符串做匹配
            chunk_match_val = chunk if isinstance(chunk, str) else chunk.get('name', '')
            ignore = any(regex.match(chunk_match_val) for regex in compiled_ignores)
            if not ignore:
                filtered_chunks.append(chunk)
    
        return filtered_chunks
    
    补丁生效后需检查settings.py中WEBPACK_LOADER配置项,确认IGNORE字段值为列表类型,避免传入None等非可迭代对象触发二次报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:31:15