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

如何从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:30:49