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
相关产品推荐
相关产品推荐

