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

未改代码却遇TypeError:int与NoneType无法比较的问题求助

Google Cloud Function中pdfminer.six抛出TypeError问题解决

基于pdfminer.six实现PDF内容提取的Google Cloud Function(GCF)此前运行正常,停用两周后再次使用时抛出以下错误:
TypeError: '<=' not supported between instances of 'int' and 'NoneType'

该错误同时出现在线上GCF和本地Functions Framework环境中,回滚至历史代码仍报错,但本地脱离Functions Framework运行则完全正常,推测是GCF运行环境的依赖版本变化导致。

完整错误栈

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/flask/app.py", line 2548, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/flask/app.py", line 2528, in wsgi_app
    response = self.handle_exception(e)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/functions_framework/__init__.py", line 98, in view_func
    return function(request._get_current_object())
  File "/Users/philwakefield/Documents/OpenSet/openset_proj/src/pdf extract/main.py", line 100, in PdfExtract
    interpreter.process_page(page)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pdfminer/pdfinterp.py", line 842, in process_page
    self.device.end_page(page)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pdfminer/converter.py", line 48, in end_page
    self.cur_item.analyze(self.laparams)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pdfminer/layout.py", line 679, in analyze
    if -1 <= laparams.boxes_flow and laparams.boxes_flow <= +1 and textboxes:
TypeError: '<=' not supported between instances of 'int' and 'NoneType'

报错相关代码片段

#extract the data
with urllib.request.urlopen(pdf_path) as url:
    fp = open('openset_schedule_1.pdf', 'rb')
    #fp = io.BytesIO(url.read())

rsrcmgr = PDFResourceManager()
laparams = LAParams(boxes_flow=None, line_margin=0.2, char_margin=0.5)
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
pages = PDFPage.get_pages(fp)

for page in pages:
    interpreter.process_page(page)

问题原因与解决方案

原因分析

错误根源在于pdfminer.six的layout.py代码中,直接对laparams.boxes_flow进行数值范围判断(-1 <= laparams.boxes_flow <= +1),但你传入的参数值为None,导致类型不兼容报错。之前运行正常的原因大概率是:

  • 本地环境使用的pdfminer.six旧版本对boxes_flow=None有兼容处理
  • GCF环境自动升级了pdfminer.six版本,移除了该兼容逻辑,而你的代码未锁定依赖版本

解决方案

  1. 修正参数值:将boxes_flow=None改为符合要求的数值(范围-1到1之间,例如boxes_flow=0),避免传入None:
    laparams = LAParams(boxes_flow=0, line_margin=0.2, char_margin=0.5)
    
  2. 锁定依赖版本:在requirements.txt中明确指定本地运行正常的pdfminer.six版本号,确保GCF环境使用相同版本,例如:
    pdfminer.six==20221105
    
  3. 验证环境一致性:对比本地与GCF环境的依赖版本,确保所有依赖包版本一致,避免因自动升级导致的兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:20:50