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
相关产品推荐
相关产品推荐

