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

使用.index()/.find()提取邮箱密码时遇ValueError报错求助

问题排查与解决方案

首先,咱们来拆解你遇到的 ValueError: substring not found 问题:

核心原因分析

这个报错本质是某一行文本里找不到 : 字符,导致 index() 方法直接抛出异常(find() 不会抛异常,但会返回 -1,后续用 -1 +2 =1 去切片也会得到错误结果)。具体到你的场景,大概率是以下两种情况之一:

  • 你的 my_data.txt 文件末尾存在空行:readlines() 读取文件时会把空行也作为列表元素,循环到空行时,line 是空字符串(或仅含换行符),自然找不到 :。
  • 你误以为文件是多行数据,但实际是一行包含两组账号密码:你的代码逻辑是逐行处理,但当前文件所有内容都在一行;就算没有空行,代码也只能提取第一组账号密码,第二组会被漏掉,若后续有空行则直接触发报错。

针对性修复方案

方案1:过滤无效行,适配逐行处理逻辑

在处理每一行前先判断有效性,跳过空行或不含 : 的行,同时优化字符串处理方式:

with open('my_data.txt', 'r') as file:  # 用with语句自动关闭文件,更安全
    for line in file.readlines():
        line = line.strip()  # 去掉首尾空格、换行符
        if not line or ':' not in line:  # 跳过无效行
            continue
        break_line = line.index(':')
        email = line[:break_line]
        password = line[break_line + 2:].strip()  # 用strip()自动清理密码前后空白,比len()更灵活
        print(f"邮箱: {email}, 密码: {password}")

方案2:适配单行多组数据的场景

因为你的文件内容是一行内包含两组账号密码,先把整行分割成独立的邮箱:密码单元再逐个处理:

with open('my_data.txt', 'r') as file:
    content = file.read().strip()
    # 按空格分割成独立的账号密码对(如果密码含空格,需调整分割逻辑)
    account_pairs = content.split()
    for pair in account_pairs:
        if ':' not in pair:
            continue
        break_line = pair.index(':')
        email = pair[:break_line]
        password = pair[break_line + 1:]  # 根据实际数据调整:如果是": "则+2,纯":"则+1
        print(f"邮箱: {email}, 密码: {password}")

额外小建议

  • 优先用 with open(...) as file 语法,它会自动关闭文件,避免资源泄漏。
  • 处理字符串时,strip() 比手动用 len() 切片更灵活,能自动处理换行符、空格等空白字符。
  • 先用 in 关键字判断字符是否存在,再调用 index(),可以提前避免异常。

内容的提问来源于stack exchange,提问作者AMIMA MALIK 11437

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:19:45