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

Python读取文件时执行int(float(img_id))触发字符串转float报错求解

问题排查与解决方案

错误原因

  • 报错触发在idx = int(float(img_id))行,和你猜测的文件内部空格无关,错误根源是你通过固定切片img_metas[0]['filename'][34:40]得到的img_id不是纯数字字符串,包含非数字字符(比如路径分隔符、文件名后缀、前后空格等),无法转换为浮点类型。
  • 固定位置切片的逻辑鲁棒性极差:只要文件路径长度变动、存储路径调整,切片得到的内容就会偏离预期的6位数字编号,是非常容易触发错误的写法。

修复步骤

第一步:定位异常值

先在切片后加打印语句,确认img_id的实际内容:

img_id = img_metas[0]['filename'][34:40]
# 前后加竖线可以直观看到是否有隐藏的前后空格
print(f"切片得到的img_id内容:|{img_id}|")

第二步:替换稳定的编号提取逻辑

不要使用固定切片,改用从文件名提取数字的通用逻辑:

import os
# 先去掉路径前缀,只保留纯文件名
base_filename = os.path.basename(img_metas[0]['filename'])
# 提取文件名中所有数字字符,取前6位作为编号
img_id = ''.join([c for c in base_filename if c.isdigit()])[:6]
# 纯数字字符串可以直接转int,不需要先转float
idx = int(img_id)

第三步:修复读文件的潜在错误

你现有读取文件的代码也存在空格相关的隐藏bug:line.split(' ')按单个空格分割,遇到连续空格、行首行尾空格时会生成空字符串,后续转float也会触发同类报错,修改为:

with open(box_2d_file) as f:
    # split()无参数时自动处理所有类型空白、过滤空值,加判断跳过空行
    arrays = [list(map(float, line.split())) for line in f if line.strip()]

可选:增加异常捕获

如果要避免单张样本异常导致整个程序崩溃,可以加异常处理逻辑:

try:
    idx = int(img_id.strip())
except ValueError as e:
    print(f"编号提取失败,img_id内容:{img_id},错误信息:{e}")
    # 此处可补充跳过当前样本、或者使用默认编号的逻辑

内容的提问来源于stack exchange,提问作者Nita Khanal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:36:04