Python读取txt输入文件时字符串转float触发ValueError报错
问题根因
报错的核心原因是待处理的字符串6.7\nFrans包含换行符\n和非数字内容Frans,你原代码仅按空格' '做分割,无法拆分换行符分隔的内容,最终得到的单个元素混杂了数字和非数字内容,无法转换为float类型。
可直接使用的解决方案
方案1:提取字符串中所有可转换为数值的内容,自动忽略非数字项
无参调用split()方法,默认会按所有空白字符(空格、换行符、制表符等)分割内容,再做合法性校验即可:
# 写法1:容错性更高的循环写法,遇到非法内容直接跳过 grades = [] for item in list[1].split(): try: grades.append(float(item)) except ValueError: pass # 写法2:简化的列表推导式写法 grades = [float(a) for a in list[1].split() if a.replace('.', '', 1).isdigit()]
方案2:每行仅需要提取第一个数值(适用于txt每行格式为「成绩 姓名」的场景)
如果你的txt文件每行结构固定为第一个元素是成绩,后续为姓名等其他信息,直接取分割后的第一个元素即可:
# 搭配读取文件逐行处理的完整示例 with open("输入文件.txt", "r", encoding="utf-8") as f: file_lines = f.readlines() # 取第二行(对应你原代码中的list[1])的第一个数值 grades = [float(file_lines[1].split()[0])]
内容的提问来源于stack exchange,提问作者Franci
相关产品推荐
相关产品推荐

