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

使用Python GZIP解压时报Exception in Tkinter callback Traceback错误

问题根因
  • 无用的JSON解析逻辑触发直接报错:你decomp函数第一行json.loads(path)完全没有存在的必要,你传入的path参数是本地gz文件的路径字符串,不符合JSON格式要求,所以直接抛出json.decoder.JSONDecodeError,这就是你当前看到的报错的直接原因。
  • gzip解压API调用逻辑错误:gzip.decompress()方法的入参要求是已经读入内存的压缩二进制数据,不是压缩文件的路径字符串,就算你删掉JSON解析的代码,现有逻辑依然会报错。
修复后可运行代码

流式解压方案(适配大文件,无内存溢出风险)

逻辑和你已经写好的comp压缩函数对应,推荐使用:

def decomp(path):
    # 校验文件后缀合法性
    if not path.endswith('.gz'):
        raise ValueError("请传入后缀为.gz的压缩文件")
    # 生成解压后输出路径:自动去掉.gz后缀
    output_path = path[:-3]
    # 流式解压逻辑
    with open(path, 'rb') as f_in, gzip.open(output_path, 'wb') as f_out:
        shutil.copyfileobj(f_in, f_out)
    print("Decompressed")

基于gzip.decompress的实现(仅适合小文件)

如果需要使用gzip.decompress接口,需要先读取文件的二进制内容再传入接口:

def decomp(path):
    if not path.endswith('.gz'):
        raise ValueError("请传入后缀为.gz的压缩文件")
    output_path = path[:-3]
    # 读取压缩文件的二进制内容
    with open(path, 'rb') as f:
        compressed_data = f.read()
    # 解压二进制内容
    decompressed_data = gzip.decompress(compressed_data)
    # 写入解压后的文件
    with open(output_path, 'wb') as f:
        f.write(decompressed_data)
    print("Decompressed")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:36:04