discord.py经济系统开发遇报错:TypeError: open()参数数量不符如何解决?
嘿,看你遇到的这个错误:discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: open() takes 1 positional argument but 2 were given,核心问题出在你调用open()的传参上——明明你写了两个参数,却被判定成传多了,大概率是**bandata变量出问题了**,下面给你一步步排查和解决的方法:
先检查
bandata的定义
你得确认bandata是一个合法的文件路径字符串。比如如果你的代码里压根没定义这个变量,或者不小心把它赋值成了函数、类这类非字符串类型,那调用open(bandata, "r")肯定会报错。举个反例:要是你误写了bandata = open(把内置的open函数赋值给它了),那调用的时候就变成open(open, "r"),这能不报错嘛!
正确的定义应该是这样的(假设你的数据文件和脚本在同一个文件夹里):bandata = "bank_data.json"确认内置
open函数没被覆盖
有时候咱们写代码会不小心自定义一个叫open的函数,把内置的open给覆盖了。如果你的自定义open只接受1个参数,那调用open(bandata, "r")的时候就会触发这个错误。
检查下你的代码里有没有类似这样的自定义函数:def open(file): # 你自己写的代码有的话赶紧给这个函数改个名字,比如叫
open_bank_file,别和内置函数重名。给你一个修复后的完整示例
我把正确的get_bank_data函数写出来,还加了文件不存在的处理,避免首次运行报错:import json from discord.ext import commands # 先正确定义文件路径 bandata = "bank_data.json" async def get_bank_data(): try: with open(bandata, "r") as f: users = json.load(f) except FileNotFoundError: # 首次运行文件不存在,创建空字典并写入 users = {} with open(bandata, "w") as f: json.dump(users, f) return users
这样调整之后,那个TypeError应该就消失啦!
内容的提问来源于stack exchange,提问作者Jonathan

