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

Imagewand运行PDF转OCR重命名脚本时while循环二次运行抛BlobError

问题原因

  • 你在脚本初始化阶段就一次性读取了当前目录的所有PDF文件存入全局变量allpdf,这个列表不会随着后续文件被重命名、移动操作自动更新。第二次循环执行TwoLine()函数时,遍历的还是最初的文件列表,列表中大部分文件已经被移动到其他目录或者被重命名,按原路径访问自然会抛出文件不存在的异常。
  • 额外问题:循环判断条件bool(allpdf)==True永远为真,你从未更新过allpdf的内容,哪怕当前目录已经没有待处理的PDF,列表还是保留初始化时的内容,会导致无效循环一直执行到scaledef低于2500才停止。

解决方法

  1. 取消全局的allpdf变量,将PDF文件列表的读取逻辑放到while循环内部,每次循环都重新扫描当前目录的PDF文件,确保拿到的是当前真实存在的待处理文件。
  2. 给TwoLine()、PNFilter()函数新增参数接收最新的PDF列表,不要依赖全局变量传值。
  3. 在操作文件前增加存在性校验,避免偶发的文件丢失导致程序崩溃。

代码修改示例

首先修改循环逻辑:

# 删掉原来的全局allpdf = find_ext(".","pdf") 这行代码
# 确保scaledef初始值 >= 2600,第一次减100后仍满足循环条件
scaledef = 3000
while scaledef >= 2500:
    # 每次循环重新读取当前目录下的PDF
    allpdf = find_ext(".","pdf")
    # 没有待处理文件直接退出循环
    if not allpdf:
        break
    scaledef -= 100
    # 把最新的文件列表传入函数
    TwoLine(allpdf)
    PNFilter(allpdf)

然后修改TwoLine()函数开头,增加文件存在性校验:

def TwoLine(allpdf):
   for PDF_file in allpdf:
      # 操作前先判断文件是否存在,不存在直接跳过
      if not os.path.exists(PDF_file):
          continue
      # 后续保留你原来的业务逻辑不变
      PDFfile = wi(filename=PDF_file[2:],resolution=200)
      # ...其余原有代码

PNFilter()函数也对应改成接收allpdf参数,操作文件前也可以加同样的存在性校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:54:03