The solution to this problem has been given in the comments. I used pygame's set_endevent module to send an event when the song is finished, which allowed me not to use sleep. This is what the code looks like now:
mixer.music.load(self.current_song)
mixer.music.play()
mixer.music.set_endevent(USEREVENT+1)