title: Discord.py not calling error handler, and not printing traceback until the program is terminated
body: <p>I'm having some issues regarding error handling with discord.py. I have set up the following command:</p>
  
  <pre><code>class InvalidVoiceChannel(VoiceConnectionError):
      """Exception for cases of invalid Voice Channels."""
  
  @commands.command(name='connect', aliases=['join'])
  async def connect_(self, ctx, *, channel: discord.VoiceChannel = None):
      if not channel:
          try:
              channel = ctx.author.voice.channel
          except AttributeError:
              raise InvalidVoiceChannel(
                  'No channel to join. Please either specify a valid channel'
                  ' or join one.'
              )
  
      vc = ctx.voice_client
  
      if vc:
          if vc.channel.id == channel.id:
              return
          try:
              await vc.move_to(channel)
          except asyncio.TimeoutError:
              raise VoiceConnectionError(
                  f'Moving to channel: &lt;{channel}&gt; timed out.'
              )
      else:
          try:
              await channel.connect()
          except asyncio.TimeoutError:
              raise VoiceConnectionError(
                  f'Connecting to channel: &lt;{channel}&gt; timed out.'
              )
  
      )
      await ctx.send(f'Connected to: **{channel}**', delete_after=20)
  </code></pre>
  
  <p>When it is run and the author is connected to a voice channel, all is well and the bot connects to the channel. However, when the author is not connected to a voice channel (and one is not passed as an argument), the error does not <em>appear</em> to be raised, and the error handler (below) is not called:</p>
  
  <pre><code>async def __error(self, ctx, error):
      if isinstance(error, commands.NoPrivateMessage):
          try:
              return await ctx.send(
                  'This command can not be used in private messages.'
              )
          except discord.HTTPException:
              pass
      elif isinstance(error, InvalidVoiceChannel):
          await ctx.send(
              'Error connecting to voice channel. Please make sure you are'
              ' in a valid channel or provide me with one.'
          )
      else:
          raise error
  </code></pre>
  
  <p>Once I press <kbd>Ctrl</kbd>+<kbd>C</kbd> to terminate the bot, then I see the following printed:</p>
  
  <pre><code>Ignoring exception in command connect:                                                               
  Traceback (most recent call last):
    File "/home/danth/Code/discord-sounds/sounds/cogs/music.py", line 269, in connect_
      channel = ctx.author.voice.channel
  AttributeError: 'NoneType' object has no attribute 'channel'
  During handling of the above exception, another exception occurred:
    Traceback (most recent call last):
      File "/home/danth/Code/.virtualenvs/discord-sounds/lib/python3.7/site-packages/discord/ext/commands/bot.py", line 863, in invoke
        await ctx.command.invoke(ctx)
      File "/home/danth/Code/.virtualenvs/discord-sounds/lib/python3.7/site-packages/discord/ext/commands/core.py", line 728, in invoke
        await injected(*ctx.args, **ctx.kwargs)
      File "/home/danth/Code/.virtualenvs/discord-sounds/lib/python3.7/site-packages/discord/ext/commands/core.py", line 79, in wrapped
        ret = await coro(*args, **kwargs)
    File "/home/danth/Code/discord-sounds/sounds/cogs/music.py", line 272, in connect_
      'No channel to join. Please either specify a valid channel'
  cogs.music.InvalidVoiceChannel: No channel to join. Please either specify a valid channel or join one.
  </code></pre>
  
  <p>Why doesn't the error handler get called, and why doesn't the traceback appear immediately?</p>