如何从TXT文件提取数字?Python转换时遇ValueError问题求助
问题解决:ValueError: invalid literal for int() with base 10: ''
错误原因
报错是因为从amt.txt读取的内容是空字符串(''),无法转换为整数。常见触发场景:
amt.txt文件为空,没有任何内容- 文件里的整数后面跟着多余空行,
readline()读取到了空行 - 文件内容包含空格、换行符等空白字符,读取后未处理就直接转整数
修复方案
1. 先检查文件内容
确保amt.txt和gamecurrency.txt中只有纯整数,没有空行、空格或其他非数字字符。比如amt.txt里应该直接写100,而不是100\n或者空着。
2. 改进文件读取逻辑
读取文件内容后先去除首尾空白字符(换行、空格等),同时用with语句自动管理文件,避免资源泄漏:
# 自动管理文件句柄,读取后去除空白字符 with open("amt.txt", "r+") as amtdec, open("gamecurrency.txt", "r+") as gc: u = amtdec.readline().strip() eg = gc.readline().strip()
3. 添加异常处理与输入校验
防止文件内容非法或用户输入无效导致程序崩溃,同时完善业务逻辑:
# 定义汇率(如果之前没定义的话) EXCHANGE_RATE = 10 # 校验文件内容并转换 try: user_balance = int(u) egc = int(eg) except ValueError as e: print(f"文件内容错误:{e},请确保文件中仅包含整数") exit(1) while True: try: deposit_amount = int(input("Enter deposit amount: $")) if deposit_amount <= user_balance: entamount = deposit_amount * EXCHANGE_RATE newgc = entamount + egc newamt = user_balance - deposit_amount # 可选:将更新后的余额写回文件 # amtdec.seek(0) # amtdec.write(str(newamt)) # amtdec.truncate() print(f"存款成功!剩余余额:{newamt},游戏货币:{newgc}") # 按需决定是否退出循环,这里示例直接退出 break else: print("存款金额超过账户余额,请重新输入") except ValueError: print("请输入有效的整数金额")
额外注意点
- 如果文件中存在多行内容,
readline()只会读取第一行,若需要读取全部内容,可改用read().strip() - 完成业务逻辑后,记得将更新后的
newamt和newgc写回对应文件,否则修改不会永久保存 - 确保
EXCHANGE_RATE变量已提前定义,否则会触发未定义错误
内容的提问来源于stack exchange,提问作者Samyak Bhattarai
相关产品推荐
相关产品推荐

