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

Python遍历文件时用len(text.readlines())引发ZeroDivisionError的原因

问题分析与解决:文件遍历中的除零错误

问题背景

需求是读取文本文件所有数据,遍历到第50行或最后一行时点击按钮并进入下一个函数。目标文件仅有44行,但运行代码时触发了如下错误:

ZeroDivisionError: integer division or modulo by zero

原代码

with open(r'D:\Workstuff\my-work-python-script\Auto_Tracker (dev)\retrieve_tracking.txt', 'r+') as text: #fetch all value
    for index, value in enumerate(text):
       if index % 49 == 0 and index != 0:
           driver.find_element(By.ID,'trackItNowForm:searchSkuBtn').click()
       elif index % len(text.readlines()) == 0 and index != 0:
           driver.find_element(By.ID,'trackItNowForm:searchSkuBtn').click()

排查过程

尝试打印相关值:

for index, value in enumerate(text): #iterate through all of them first
    print(f'Total Line :{len(text.readlines())}')
    print(f'Index = {index}')

输出结果为:

Total Line : 44
Index = 0

明明文件长度不为0,却触发了除零错误。


问题原因

核心问题出在文件对象的迭代器特性:

  • 文件对象是一次性迭代器,调用text.readlines()时,会把文件指针移动到文件末尾,一次性读取所有行。
  • 第一次循环(index=0)调用len(text.readlines())得到44,但此时文件指针已经到了末尾;第二次循环(index=1)再调用text.readlines()时,会返回空列表,长度为0,导致index % 0触发除零错误。
  • 另外原代码的逻辑还有两个错误:
    1. index % 49 ==0的判断不符合需求——index从0开始,第50行对应的index是49,而该条件会在index=49、98等行触发,不是仅第50行。
    2. index % len(text.readlines()) ==0的逻辑错误:比如文件共44行,最后一行的index是43,43%44不等于0,根本不会触发点击,不符合“最后一行点击”的需求。

修正方案

提前将所有行读取到内存列表中,避免迭代器指针移动的问题,同时修正判断逻辑:

with open(r'D:\Workstuff\my-work-python-script\Auto_Tracker (dev)\retrieve_tracking.txt', 'r+') as text:
    # 一次性读取所有行到列表,后续可重复使用
    lines = text.readlines()
    total_lines = len(lines)
    for index, value in enumerate(lines):
        # 判断是否是第50行(index=49)或最后一行(index=总长度-1)
        if index == 49 or index == total_lines - 1:
            driver.find_element(By.ID,'trackItNowForm:searchSkuBtn').click()
            # 在这里添加进入下一个函数的逻辑

修正说明

  1. 提前读取所有行到lines列表,total_lines只计算一次,避免重复调用readlines()导致的指针问题。
  2. 直接判断index值,精准匹配第50行和最后一行的触发条件,逻辑更清晰准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:25:39