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

Flask提取PDF高亮内容报UnboundLocalError错误如何解决?

问题解决方法

报错原因

你触发UnboundLocalError: local variable 'lst' referenced before assignment的核心原因是process_file函数中,lst变量的赋值逻辑被包裹在了if __name__ == "__main__"判断分支中:

  • 该判断分支仅在直接运行script.py文件时才会执行
  • 当Flask服务调用process_file函数时,判断不会触发,lst未被定义就被后续的for x in lst循环调用,直接抛出错误

修复方案

直接删除if __name__ == "__main__"这层判断,修改process_file末尾的代码即可:

# 删掉原来的if判断,直接调用main函数赋值lst
lst = main(file)               

# converting page column to integer type
for x in lst:
    x[-2]=int(x[-2])

# 补充:如果需要把提取结果返回给Flask接口使用,末尾加return
return lst

如果需要在前端展示提取结果,同步修改Flask接口的代码:

@app.route('/converted',methods = ['GET', 'POST'])
def convert():
    fi = request.files['pdf']
    f1 = fi.filename
    fi.save(f1)
    highlight_lst = process_file(f1)
    # 把提取结果传给模板
    return render_template('converted.html', highlights=highlight_lst)

额外注意要提前导入所有依赖:fitz(即PyMuPDF)、re、typing模块的List、Tuple。

其他PDF标注提取可行方案

  • 用pdfannots第三方库:专门针对PDF注释提取的工具库,原生支持高亮、下划线、文本注释等多种标注类型的提取,无需手动写坐标匹配逻辑,调用简单兼容性强。
  • 用pdfplumber + PyPDF2组合:PyPDF2读取PDF注释信息,pdfplumber提取页面对应位置的文本内容,两者匹配得到高亮文本,对部分加密/非标准格式的PDF兼容性优于PyMuPDF。
  • 用Poppler套件的pdftotext命令行工具:批量处理场景可直接调用命令行导出带位置信息的文本,配合正则匹配提取高亮内容,适合不需要嵌入业务逻辑的离线批量处理需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:24:03