Я недавно перешел на версию 3.7.3 для python и пытался обновить код, чтобы он соответствовал новой версии.
До переключения у pickle не было бы проблем с выгрузкой и загрузкой словарей, которые я отправил, но теперь он продолжает выдавать ошибку TypeError: can't pickle TaskStepMethWrapper objects
Поиск TaskStepMethWrapper показывает, что он может быть связан с asyncio, но эта ошибка не отображалась при использовании Python 3.6.
Вот мой код
def load_guildlist(self):
with open("guildlist.dadbot","rb") as sl:
return pickle.loads(sl.read())
#edits the guildlist into an external file
def edit_guildlist(self,dictionary):
with open("guildlist.dadbot","wb") as sl:
#attempt to force the passing of a dictionary
pickle.dump(dict(dictionary),sl)
#Registers the guild into the guildlist
async def on_guild_join(self,guild):
#Setup an initial prefix for flexible changing later
#Check to see if guildlist is empty or not(may only ever run once)
try:
self.guildlist = self.load_guildlist()
except EOFError:
self.guildlist = {}
self.edit_guildlist(self.guildlist)
#Stores a random prefix for the guild so it can be changed later
#Should allow for guilds to have prefix preferences
#Also sets guild preferences and statuses
if guild not in self.guildlist:
#New guild
self.guildlist[guild]={}
self.guildlist[guild]["prefix"] = genPrefix()
self.guildlist[guild]["voice_channel"] = "all"
self.edit_guildlist(self.guildlist)
Вот обратная связь:
Ignoring exception in on_guild_join
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/discord/client.py", line 251, in _run_event
await coro(*args, **kwargs)
File "main.py", line 68, in on_guild_join
self.edit_guildlist(self.guildlist)
File "main.py", line 48, in edit_guildlist
pickle.dump(dict(dictionary),sl)
TypeError: can't pickle TaskStepMethWrapper objects
Ignoring exception in on_message
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/discord/client.py", line 251, in _run_event
await coro(*args, **kwargs)
File "main.py", line 80, in on_message
self.guildlist = self.load_guildlist()
File "main.py", line 42, in load_guildlist
return pickle.loads(sl.read())
EOFError: Ran out of input