问题
I recently switched to version 3.7.3 for python and I've been attempting to update the code to fit the new version.
Before switching, pickle would have no problem dumping and loading the dictionaries I've sent it but now it keeps giving me a TypeError: can't pickle TaskStepMethWrapper objects error
Searching for TaskStepMethWrapper shows that it may be related to asyncio, but this error did not show up when I was using python 3.6.
Heres my code
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)
Heres the traceback:
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
    来源:https://stackoverflow.com/questions/56213159/why-is-python-pickle-failing-to-dump-dictionaries-in-3-7