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

Python使用zipfile模块时ZIP_STORED未定义的NameError问题咨询

为什么会出现NameError: "global name 'ZIP_STORED' is not defined"?

这个问题我碰到过好多次啦!你遇到的错误原因其实很简单:你只导入了zipfile模块里的ZipFile类,但ZIP_STORED这个压缩模式常量并没有被导入到当前代码的命名空间中。

当你写from zipfile import ZipFile时,Python只会把ZipFile这一个类拉到当前的全局命名空间里,而zipfile模块里的其他内容(比如ZIP_STORED、ZIP_DEFLATED这些压缩模式常量)并不会自动被导入,所以直接用ZIP_STORED的时候,Python找不到它,自然就抛出NameError了。

两种解决方法

方法1:显式导入ZIP_STORED

修改你的导入语句,把ZIP_STORED也一起导入进来,这样就能直接使用它了:

from zipfile import ZipFile, ZIP_STORED
from io import StringIO  # 别忘了导入StringIO,不然这里也会报错哦

def compress(self, filename, data):
    inMemoryOutputFile = StringIO()
    zipFile = ZipFile(inMemoryOutputFile, 'w', ZIP_STORED)
    zipFile.writestr(filename, data)
    zipFile.close()
    inMemoryOutputFile.seek(0)
    return inMemoryOutputFile

方法2:通过模块名引用ZIP_STORED

如果你不想额外导入单个常量,可以直接导入整个zipfile模块,然后用zipfile.ZIP_STORED的方式来引用这个常量:

import zipfile
from io import StringIO

def compress(self, filename, data):
    inMemoryOutputFile = StringIO()
    zipFile = zipfile.ZipFile(inMemoryOutputFile, 'w', zipfile.ZIP_STORED)
    zipFile.writestr(filename, data)
    zipFile.close()
    inMemoryOutputFile.seek(0)
    return inMemoryOutputFile

总结一下:ZIP_STORED是zipfile模块专属的成员,不是Python内置的全局变量,必须通过显式导入或者模块名引用才能正常使用哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:00:01