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

discord.py经济小游戏读取文件转数值触发TypeError问题求解

问题解决方案

你遇到的报错核心原因是直接将open()返回的文件对象传入了int()方法,没有读取文件的实际文本内容。除此之外你的代码还存在多处逻辑错误,完整修复方案如下:

错误点汇总

  • 开头用'w'模式打开文件会直接清空原有余额数据,丢失历史存储的金额
  • 随机抽取的begmoney是字符串类型,无法直接和数值做算术运算
  • 读取余额时仅获取了文件对象,没有调用read()方法读取存储的数值文本
  • 文件操作没有使用上下文管理器,读写完成后未主动关闭文件,会导致读写指针异常、资源泄露
  • 没有处理用户文件不存在的初始化场景,首次运行命令会直接报错

修复后代码

import random
import discord
from discord.ext import commands

async def beg(ctx):
    # 初始化用户余额,文件不存在则默认设为0
    username = ctx.author.name
    try:
        with open(username, 'r') as f:
            old_balance = int(f.read().strip())
    except FileNotFoundError:
        old_balance = 0
    
    # 随机生成乞讨获得的金额,直接用整数类型避免转换问题
    money_list = [10,25,69,75,100]
    beg_money = random.choice(money_list)
    
    # 计算新余额
    new_balance = old_balance + beg_money
    
    # 写入新余额到文件
    with open(username, 'w') as f:
        f.write(str(new_balance))
    
    # 发送消息
    await ctx.send(f"你乞讨获得了 {beg_money} 金币")
    await ctx.send(f"你当前的余额为: {new_balance} 金币")

改动说明

  • 使用with上下文管理器自动处理文件的打开关闭,避免资源泄露和指针异常
  • 新增文件不存在的异常捕获逻辑,首次运行自动初始化余额为0
  • 随机金额池直接使用整数类型,避免字符串和数值混合运算报错
  • 读取文件时调用strip()清除可能存在的换行符、空格等空白字符,避免转换整数失败
  • 所有输出使用f-string格式化,避免不同类型变量拼接报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:48:04