读取文本文件转整数列表时报ValueError: could not convert string to float: ''错误
问题原因
- 用
for line in f_in读取文件行时,每行内容默认会携带末尾的换行符\n,如果文件末尾存在空行,还会读到完全为空的字符串。你直接把未处理的整行内容传给est()函数,遍历字符时会取到\n这类非数字字符,甚至是空字符串,转换为float时自然会触发报错。 - 另外你当前
est()中的遍历逻辑需要和实际需求匹配:如果是要把每行的整个数字作为一个元素存入列表,逐字符遍历的逻辑本身是错误的;如果是要把数字拆成单个数位的列表,也需要先清理掉非数字的空白字符。
修复方案
第一步:读取行时先做空白清理
遍历到每行之后,先调用.strip()方法去掉首尾的所有空白字符(包含换行符、空格、制表符),同时判断清理后的内容是否为空,跳过空行避免无效输入:
with open(in_path, "r", encoding = "utf-8") as f_in, \ open(out_path, "w", encoding = "utf-8") as f_out: for line in f_in: # 清理首尾空白字符 clean_line = line.strip() # 跳过空行 if not clean_line: continue word1 = est(clean_line) # 输出时主动加换行,避免所有输出挤在同一行 f_out.write(f"{clean_line} = {word1}\n")
第二步:按实际需求调整est()逻辑
需求1:把每行的整个数字作为单个元素存入整数列表
比如输入23,输出为[23],est()修改为:
def est(num_str): num_list = [] # 直接把整个字符串转成整数加入列表,不需要转float也不需要逐字符遍历 num_list.append(int(num_str)) return num_list
需求2:把每行数字的每一位拆成单个整数组成列表
比如输入23,输出为[2,3],est()修改为:
def est(num_str): num_list = [] for i in num_str: # 已经提前清理过空白,直接转int即可,不需要中转float num_list.append(int(i)) return num_list
报错补充说明
你遇到的ValueError: could not convert string to float: ''报错,本质就是输入est()的字符串里包含空内容或者换行符,提前做空白清理+空行过滤即可完全解决。
内容的提问来源于stack exchange,提问作者CaptainSalty
相关产品推荐
相关产品推荐

