title: Why asyncio raises TimeoutError without any message?
body: <p>I encountered a small annoyance with this code:</p>
  
  <pre><code>try:
      return await asyncio.wait_for(tcp_command(cmd), timeout=timeout)
  except (OSError, asyncio.TimeoutError) as err:
      print(f"Network problem: {err}")
  </code></pre>
  
  <p>When the timeout occurs, it prints just "Network problem: ". It is caused by an empty value attached to the raised asyncio.TimeoutError:</p>
  
  <pre><code># inside wait_for():
  raise futures.TimeoutError()
  </code></pre>
  
  <p>It is easy to hadle the <code>TimeoutError</code> separately, but I find the original construct quite idiomatic and now a core library breaks it. Is there a good reason for it? Is my assumption - that printing an exception should give us a clue what went wrong - correct?</p>