diff --git a/synapse/app/_base.py b/synapse/app/_base.py
index cf4730730d222e3fc7688854a2d881805759fd17..94777377597fe640c45577d6112b1a227823ed7c 100644
--- a/synapse/app/_base.py
+++ b/synapse/app/_base.py
@@ -19,7 +19,7 @@ import sys
 
 try:
     import affinity
-except:
+except Exception:
     affinity = None
 
 from daemonize import Daemonize
diff --git a/synapse/appservice/scheduler.py b/synapse/appservice/scheduler.py
index 68a9de17b8140bfc4b622cac0012c2682aae5e96..6da315473d3cb94442e0e5686913a5fdf19a6961 100644
--- a/synapse/appservice/scheduler.py
+++ b/synapse/appservice/scheduler.py
@@ -123,7 +123,7 @@ class _ServiceQueuer(object):
                 with Measure(self.clock, "servicequeuer.send"):
                     try:
                         yield self.txn_ctrl.send(service, events)
-                    except:
+                    except Exception:
                         logger.exception("AS request failed")
         finally:
             self.requests_in_flight.discard(service.id)
diff --git a/synapse/config/server.py b/synapse/config/server.py
index c9a1715f1ff39992786a64ce2e31d1760f6459be..b66993dab9adf3718ebfad88c7cbb529f9083cff 100644
--- a/synapse/config/server.py
+++ b/synapse/config/server.py
@@ -303,7 +303,7 @@ def read_gc_thresholds(thresholds):
         return (
             int(thresholds[0]), int(thresholds[1]), int(thresholds[2]),
         )
-    except:
+    except Exception:
         raise ConfigError(
             "Value of `gc_threshold` must be a list of three integers if set"
         )
diff --git a/synapse/crypto/context_factory.py b/synapse/crypto/context_factory.py
index aad4752fe77694bfb04c1375f0e63745c388fa1b..cff3ca809abadd805e3bbf96dfa09557d25c229b 100644
--- a/synapse/crypto/context_factory.py
+++ b/synapse/crypto/context_factory.py
@@ -34,7 +34,7 @@ class ServerContextFactory(ssl.ContextFactory):
         try:
             _ecCurve = _OpenSSLECCurve(_defaultCurveName)
             _ecCurve.addECKeyToContext(context)
-        except:
+        except Exception:
             logger.exception("Failed to enable elliptic curve for TLS")
         context.set_options(SSL.OP_NO_SSLv2 | SSL.OP_NO_SSLv3)
         context.use_certificate_chain_file(config.tls_certificate_file)
diff --git a/synapse/crypto/event_signing.py b/synapse/crypto/event_signing.py
index ec7711ba7d42f0e6f7d47036efac08da69d30baf..0d0e7b5286dfd758f7d18db6e17b10552e56befd 100644
--- a/synapse/crypto/event_signing.py
+++ b/synapse/crypto/event_signing.py
@@ -43,7 +43,7 @@ def check_event_content_hash(event, hash_algorithm=hashlib.sha256):
     message_hash_base64 = event.hashes[name]
     try:
         message_hash_bytes = decode_base64(message_hash_base64)
-    except:
+    except Exception:
         raise SynapseError(
             400,
             "Invalid base64: %s" % (message_hash_base64,),
diff --git a/synapse/crypto/keyring.py b/synapse/crypto/keyring.py
index 054bac456da29a161b3d1ab3b7a7e8b90a78360d..35f810b07be9ede18bcdc50458de9da221b6e865 100644
--- a/synapse/crypto/keyring.py
+++ b/synapse/crypto/keyring.py
@@ -759,7 +759,7 @@ def _handle_key_deferred(verify_request):
     ))
     try:
         verify_signed_json(json_object, server_name, verify_key)
-    except:
+    except Exception:
         raise SynapseError(
             401,
             "Invalid signature for server %s with key %s:%s" % (
diff --git a/synapse/event_auth.py b/synapse/event_auth.py
index 9e746a28bf75e3a462b95f106724fa005eeb4b9b..061ee86b165f9e30f9a3a503b753061c2177641c 100644
--- a/synapse/event_auth.py
+++ b/synapse/event_auth.py
@@ -443,12 +443,12 @@ def _check_power_levels(event, auth_events):
     for k, v in user_list.items():
         try:
             UserID.from_string(k)
-        except:
+        except Exception:
             raise SynapseError(400, "Not a valid user_id: %s" % (k,))
 
         try:
             int(v)
-        except:
+        except Exception:
             raise SynapseError(400, "Not a valid power level: %s" % (v,))
 
     key = (event.type, event.state_key, )
diff --git a/synapse/events/spamcheck.py b/synapse/events/spamcheck.py
index dccc579eac814cfa63b34f34a011e2b16368ef73..633e068eb8d54d3cb535874a5ed7bc3c4af5e4b0 100644
--- a/synapse/events/spamcheck.py
+++ b/synapse/events/spamcheck.py
@@ -22,7 +22,7 @@ class SpamChecker(object):
         config = None
         try:
             module, config = hs.config.spam_checker
-        except:
+        except Exception:
             pass
 
         if module is not None:
diff --git a/synapse/federation/transport/server.py b/synapse/federation/transport/server.py
index f0778c65c5d04a94bc8836498bbacf67ee6c2ad6..1e68a898d51918b4b3a3ceb7a158171f6c9d086f 100644
--- a/synapse/federation/transport/server.py
+++ b/synapse/federation/transport/server.py
@@ -112,7 +112,7 @@ class Authenticator(object):
                 key = strip_quotes(param_dict["key"])
                 sig = strip_quotes(param_dict["sig"])
                 return (origin, key, sig)
-            except:
+            except Exception:
                 raise AuthenticationError(
                     400, "Malformed Authorization header", Codes.UNAUTHORIZED
                 )
@@ -177,7 +177,7 @@ class BaseFederationServlet(object):
                 if self.REQUIRE_AUTH:
                     logger.exception("authenticate_request failed")
                     raise
-            except:
+            except Exception:
                 logger.exception("authenticate_request failed")
                 raise
 
@@ -270,7 +270,7 @@ class FederationSendServlet(BaseFederationServlet):
             code, response = yield self.handler.on_incoming_transaction(
                 transaction_data
             )
-        except:
+        except Exception:
             logger.exception("on_incoming_transaction failed")
             raise
 
diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py
index 7711cded015ba5ff87d408934f16e45525fd2f00..8b1e6067548b41f5d10aab6a9fed9dfec70d63e3 100644
--- a/synapse/handlers/federation.py
+++ b/synapse/handlers/federation.py
@@ -227,7 +227,7 @@ class FederationHandler(BaseHandler):
                 state, auth_chain = yield self.replication_layer.get_state_for_room(
                     origin, pdu.room_id, pdu.event_id,
                 )
-            except:
+            except Exception:
                 logger.exception("Failed to get state for event: %s", pdu.event_id)
 
         yield self._process_received_pdu(
@@ -461,7 +461,7 @@ class FederationHandler(BaseHandler):
         def check_match(id):
             try:
                 return server_name == get_domain_from_id(id)
-            except:
+            except Exception:
                 return False
 
         # Parses mapping `event_id -> (type, state_key) -> state event_id`
@@ -499,7 +499,7 @@ class FederationHandler(BaseHandler):
                             continue
                         try:
                             domain = get_domain_from_id(ev.state_key)
-                        except:
+                        except Exception:
                             continue
 
                         if domain != server_name:
@@ -738,7 +738,7 @@ class FederationHandler(BaseHandler):
                         joined_domains[dom] = min(d, old_d)
                     else:
                         joined_domains[dom] = d
-                except:
+                except Exception:
                     pass
 
             return sorted(joined_domains.items(), key=lambda d: d[1])
@@ -940,7 +940,7 @@ class FederationHandler(BaseHandler):
                     room_creator_user_id="",
                     is_public=False
                 )
-            except:
+            except Exception:
                 # FIXME
                 pass
 
@@ -1775,7 +1775,7 @@ class FederationHandler(BaseHandler):
                     [e_id for e_id, _ in event.auth_events]
                 )
                 seen_events = set(have_events.keys())
-            except:
+            except Exception:
                 # FIXME:
                 logger.exception("Failed to get auth chain")
 
@@ -1899,7 +1899,7 @@ class FederationHandler(BaseHandler):
                         except AuthError:
                             pass
 
-                except:
+                except Exception:
                     # FIXME:
                     logger.exception("Failed to query auth chain")
 
@@ -1966,7 +1966,7 @@ class FederationHandler(BaseHandler):
         def get_next(it, opt=None):
             try:
                 return it.next()
-            except:
+            except Exception:
                 return opt
 
         current_local = get_next(local_iter)
diff --git a/synapse/handlers/initial_sync.py b/synapse/handlers/initial_sync.py
index 10f5f35a69eeb1b75da4fced73e1cec9ac3029bb..9718d4abc582810760845387cf99577ee583ad07 100644
--- a/synapse/handlers/initial_sync.py
+++ b/synapse/handlers/initial_sync.py
@@ -214,7 +214,7 @@ class InitialSyncHandler(BaseHandler):
                     })
 
                 d["account_data"] = account_data_events
-            except:
+            except Exception:
                 logger.exception("Failed to get snapshot")
 
         yield concurrently_execute(handle_room, room_list, 10)
diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py
index 28792788d9fdeecd4ea11cbe00aac39dd08f5968..21f1717dd2c9b156c8c7928b5771cbf93b53bc51 100644
--- a/synapse/handlers/message.py
+++ b/synapse/handlers/message.py
@@ -563,7 +563,7 @@ class MessageHandler(BaseHandler):
         try:
             dump = ujson.dumps(unfreeze(event.content))
             ujson.loads(dump)
-        except:
+        except Exception:
             logger.exception("Failed to encode content: %r", event.content)
             raise
 
diff --git a/synapse/handlers/presence.py b/synapse/handlers/presence.py
index c7c0b0a1e2d934d520beb6f8cafb04d5af68eafb..fa96ea69cd2314d7c9ee66d21cde409908bcaff7 100644
--- a/synapse/handlers/presence.py
+++ b/synapse/handlers/presence.py
@@ -364,7 +364,7 @@ class PresenceHandler(object):
                 )
 
             preserve_fn(self._update_states)(changes)
-        except:
+        except Exception:
             logger.exception("Exception in _handle_timeouts loop")
 
     @defer.inlineCallbacks
diff --git a/synapse/handlers/profile.py b/synapse/handlers/profile.py
index e56e0a52bf456c8e5fc38bdbdd83d4fbd093ef83..62b9bd503ec3ac26b47990a5f3c5c62ac50946af 100644
--- a/synapse/handlers/profile.py
+++ b/synapse/handlers/profile.py
@@ -118,7 +118,7 @@ class ProfileHandler(BaseHandler):
                     logger.exception("Failed to get displayname")
 
                 raise
-            except:
+            except Exception:
                 logger.exception("Failed to get displayname")
             else:
                 defer.returnValue(result["displayname"])
@@ -165,7 +165,7 @@ class ProfileHandler(BaseHandler):
                 if e.code != 404:
                     logger.exception("Failed to get avatar_url")
                 raise
-            except:
+            except Exception:
                 logger.exception("Failed to get avatar_url")
 
             defer.returnValue(result["avatar_url"])
@@ -266,7 +266,7 @@ class ProfileHandler(BaseHandler):
                     },
                     ignore_backoff=True,
                 )
-            except:
+            except Exception:
                 logger.exception("Failed to get avatar_url")
 
                 yield self.store.update_remote_profile_cache(
diff --git a/synapse/handlers/register.py b/synapse/handlers/register.py
index 52aa9964d9c50fd14ad65a07032abb7d4ff99fc7..49dc33c14722fafee6912f8a0d80426fd0e295a6 100644
--- a/synapse/handlers/register.py
+++ b/synapse/handlers/register.py
@@ -289,7 +289,7 @@ class RegistrationHandler(BaseHandler):
             try:
                 identity_handler = self.hs.get_handlers().identity_handler
                 threepid = yield identity_handler.threepid_from_creds(c)
-            except:
+            except Exception:
                 logger.exception("Couldn't validate 3pid")
                 raise RegistrationError(400, "Couldn't validate 3pid")
 
diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index e945bd35bcccbfd7a29b977f895afacb63fb3693..496f1fc39bc18a5c3f86c6227f25d7a8e8b13857 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -108,7 +108,7 @@ class RoomCreationHandler(BaseHandler):
         for i in invite_list:
             try:
                 UserID.from_string(i)
-            except:
+            except Exception:
                 raise SynapseError(400, "Invalid user_id: %s" % (i,))
 
         invite_3pid_list = config.get("invite_3pid", [])
diff --git a/synapse/handlers/search.py b/synapse/handlers/search.py
index df75d70fac251200669ce3802b3ffa006486efa7..9772ed1a0e7cb17ac87b0b486c5ee5b9fda6e1ab 100644
--- a/synapse/handlers/search.py
+++ b/synapse/handlers/search.py
@@ -61,7 +61,7 @@ class SearchHandler(BaseHandler):
                 assert batch_group is not None
                 assert batch_group_key is not None
                 assert batch_token is not None
-            except:
+            except Exception:
                 raise SynapseError(400, "Invalid batch")
 
         try:
diff --git a/synapse/http/matrixfederationclient.py b/synapse/http/matrixfederationclient.py
index 8c8b7fa6561d067955c5b879f64e2a45c6657b3a..833496b72d0f42e6b5e663245cbb7644796b4561 100644
--- a/synapse/http/matrixfederationclient.py
+++ b/synapse/http/matrixfederationclient.py
@@ -550,7 +550,7 @@ class MatrixFederationHttpClient(object):
                 length = yield _readBodyToFile(
                     response, output_stream, max_size
                 )
-        except:
+        except Exception:
             logger.exception("Failed to download body")
             raise
 
diff --git a/synapse/http/server.py b/synapse/http/server.py
index 8a27e3b42241bb1fe39c98ef47de9a243bff1a95..3ca1c9947c38ce23a1b8954d75d711b47563928b 100644
--- a/synapse/http/server.py
+++ b/synapse/http/server.py
@@ -130,7 +130,7 @@ def wrap_request_handler(request_handler, include_metrics=False):
                             pretty_print=_request_user_agent_is_curl(request),
                             version_string=self.version_string,
                         )
-                    except:
+                    except Exception:
                         logger.exception(
                             "Failed handle request %s.%s on %r: %r",
                             request_handler.__module__,
diff --git a/synapse/http/servlet.py b/synapse/http/servlet.py
index 9a4c36ad5d333ebe852184bbdc4d407f5428f43e..8118ee7cc2c224e7e077a6bd3df31379b283fa7b 100644
--- a/synapse/http/servlet.py
+++ b/synapse/http/servlet.py
@@ -48,7 +48,7 @@ def parse_integer_from_args(args, name, default=None, required=False):
     if name in args:
         try:
             return int(args[name][0])
-        except:
+        except Exception:
             message = "Query parameter %r must be an integer" % (name,)
             raise SynapseError(400, message)
     else:
@@ -88,7 +88,7 @@ def parse_boolean_from_args(args, name, default=None, required=False):
                 "true": True,
                 "false": False,
             }[args[name][0]]
-        except:
+        except Exception:
             message = (
                 "Boolean query parameter %r must be one of"
                 " ['true', 'false']"
@@ -162,7 +162,7 @@ def parse_json_value_from_request(request):
     """
     try:
         content_bytes = request.content.read()
-    except:
+    except Exception:
         raise SynapseError(400, "Error reading JSON content.")
 
     try:
diff --git a/synapse/http/site.py b/synapse/http/site.py
index 4b09d7ee66508514bcbb4b4b175e7e6e23713913..cd1492b1c3f3ca475fe72540733ccd535463146d 100644
--- a/synapse/http/site.py
+++ b/synapse/http/site.py
@@ -67,7 +67,7 @@ class SynapseRequest(Request):
             ru_utime, ru_stime = context.get_resource_usage()
             db_txn_count = context.db_txn_count
             db_txn_duration = context.db_txn_duration
-        except:
+        except Exception:
             ru_utime, ru_stime = (0, 0)
             db_txn_count, db_txn_duration = (0, 0)
 
diff --git a/synapse/notifier.py b/synapse/notifier.py
index 385208b574035c11f58b26b184e5e6a50479d7f1..626da778cd058e7c7de93ffb740eeecd119f7fb3 100644
--- a/synapse/notifier.py
+++ b/synapse/notifier.py
@@ -289,7 +289,7 @@ class Notifier(object):
                 for user_stream in user_streams:
                     try:
                         user_stream.notify(stream_key, new_token, time_now_ms)
-                    except:
+                    except Exception:
                         logger.exception("Failed to notify listener")
 
                 self.notify_replication()
diff --git a/synapse/push/emailpusher.py b/synapse/push/emailpusher.py
index a69dda7b091430c8ec006f34265f50075ff1f6bb..58df98a793e620cf2bb2060ceb5ae2111d060611 100644
--- a/synapse/push/emailpusher.py
+++ b/synapse/push/emailpusher.py
@@ -121,7 +121,7 @@ class EmailPusher(object):
                         starting_max_ordering = self.max_stream_ordering
                         try:
                             yield self._unsafe_process()
-                        except:
+                        except Exception:
                             logger.exception("Exception processing notifs")
                         if self.max_stream_ordering == starting_max_ordering:
                             break
diff --git a/synapse/push/httppusher.py b/synapse/push/httppusher.py
index 62c41cd9dbe5363e564716f85a3cafac79ed659f..74c0bc462c4b7af682356652bdfe09917512bbd3 100644
--- a/synapse/push/httppusher.py
+++ b/synapse/push/httppusher.py
@@ -131,7 +131,7 @@ class HttpPusher(object):
                         starting_max_ordering = self.max_stream_ordering
                         try:
                             yield self._unsafe_process()
-                        except:
+                        except Exception:
                             logger.exception("Exception processing notifs")
                         if self.max_stream_ordering == starting_max_ordering:
                             break
@@ -314,7 +314,7 @@ class HttpPusher(object):
             defer.returnValue([])
         try:
             resp = yield self.http_client.post_json_get_json(self.url, notification_dict)
-        except:
+        except Exception:
             logger.warn("Failed to push %s ", self.url)
             defer.returnValue(False)
         rejected = []
@@ -345,7 +345,7 @@ class HttpPusher(object):
         }
         try:
             resp = yield self.http_client.post_json_get_json(self.url, d)
-        except:
+        except Exception:
             logger.exception("Failed to push %s ", self.url)
             defer.returnValue(False)
         rejected = []
diff --git a/synapse/push/pusher.py b/synapse/push/pusher.py
index 491f27bdede727556cbb5fd047fc292c594c811a..71576330a9366a29eb603f04fd6bcb9a47233022 100644
--- a/synapse/push/pusher.py
+++ b/synapse/push/pusher.py
@@ -27,7 +27,7 @@ logger = logging.getLogger(__name__)
 try:
     from synapse.push.emailpusher import EmailPusher
     from synapse.push.mailer import Mailer, load_jinja2_templates
-except:
+except Exception:
     pass
 
 
diff --git a/synapse/push/pusherpool.py b/synapse/push/pusherpool.py
index 43cb6e9c0190f37e45990ff4d22055032fa3e134..7c069b662e9f479d01dfca79f38f0348e31a9cb3 100644
--- a/synapse/push/pusherpool.py
+++ b/synapse/push/pusherpool.py
@@ -137,7 +137,7 @@ class PusherPool:
                         )
 
             yield preserve_context_over_deferred(defer.gatherResults(deferreds))
-        except:
+        except Exception:
             logger.exception("Exception in pusher on_new_notifications")
 
     @defer.inlineCallbacks
@@ -162,7 +162,7 @@ class PusherPool:
                         )
 
             yield preserve_context_over_deferred(defer.gatherResults(deferreds))
-        except:
+        except Exception:
             logger.exception("Exception in pusher on_new_receipts")
 
     @defer.inlineCallbacks
@@ -188,7 +188,7 @@ class PusherPool:
         for pusherdict in pushers:
             try:
                 p = self.pusher_factory.create_pusher(pusherdict)
-            except:
+            except Exception:
                 logger.exception("Couldn't start a pusher: caught Exception")
                 continue
             if p:
diff --git a/synapse/replication/tcp/resource.py b/synapse/replication/tcp/resource.py
index 6c1beca4e3c4c382d36c3b7585dec281fa9c7c9e..1d03e79b858ddf3fd1ffe32fafd624ed8a9e162c 100644
--- a/synapse/replication/tcp/resource.py
+++ b/synapse/replication/tcp/resource.py
@@ -162,7 +162,7 @@ class ReplicationStreamer(object):
                         )
                         try:
                             updates, current_token = yield stream.get_updates()
-                        except:
+                        except Exception:
                             logger.info("Failed to handle stream %s", stream.NAME)
                             raise
 
diff --git a/synapse/rest/client/v1/directory.py b/synapse/rest/client/v1/directory.py
index f15aa5c13f4439555db1df55b4f5cf3327ca52fe..1c3933380f57420b969ba2aa01d1a27d4b57408a 100644
--- a/synapse/rest/client/v1/directory.py
+++ b/synapse/rest/client/v1/directory.py
@@ -93,7 +93,7 @@ class ClientDirectoryServer(ClientV1RestServlet):
                 )
             except SynapseError as e:
                 raise e
-            except:
+            except Exception:
                 logger.exception("Failed to create association")
                 raise
         except AuthError:
diff --git a/synapse/rest/client/v1/presence.py b/synapse/rest/client/v1/presence.py
index 47b2dc45e71db58fe1eca99498776b0a417bedc4..4a73813c58071ad544adbb19ecc8d21e9672b790 100644
--- a/synapse/rest/client/v1/presence.py
+++ b/synapse/rest/client/v1/presence.py
@@ -78,7 +78,7 @@ class PresenceStatusRestServlet(ClientV1RestServlet):
                 raise KeyError()
         except SynapseError as e:
             raise e
-        except:
+        except Exception:
             raise SynapseError(400, "Unable to parse state")
 
         yield self.presence_handler.set_state(user, state)
diff --git a/synapse/rest/client/v1/profile.py b/synapse/rest/client/v1/profile.py
index d7edc342456dfd37522f97c151e0f3413a0abdae..e4e3611a1455d0319feb0e24aadccb13dca6fedc 100644
--- a/synapse/rest/client/v1/profile.py
+++ b/synapse/rest/client/v1/profile.py
@@ -52,7 +52,7 @@ class ProfileDisplaynameRestServlet(ClientV1RestServlet):
 
         try:
             new_name = content["displayname"]
-        except:
+        except Exception:
             defer.returnValue((400, "Unable to parse name"))
 
         yield self.profile_handler.set_displayname(
@@ -94,7 +94,7 @@ class ProfileAvatarURLRestServlet(ClientV1RestServlet):
         content = parse_json_object_from_request(request)
         try:
             new_name = content["avatar_url"]
-        except:
+        except Exception:
             defer.returnValue((400, "Unable to parse name"))
 
         yield self.profile_handler.set_avatar_url(
diff --git a/synapse/rest/client/v1/room.py b/synapse/rest/client/v1/room.py
index 6c379d53ac714306b5591f39bc73a81e5ddff940..75b735b47dbc423a97248cf08301f6d4c3e69f21 100644
--- a/synapse/rest/client/v1/room.py
+++ b/synapse/rest/client/v1/room.py
@@ -238,7 +238,7 @@ class JoinRoomAliasServlet(ClientV1RestServlet):
 
         try:
             content = parse_json_object_from_request(request)
-        except:
+        except Exception:
             # Turns out we used to ignore the body entirely, and some clients
             # cheekily send invalid bodies.
             content = {}
@@ -247,7 +247,7 @@ class JoinRoomAliasServlet(ClientV1RestServlet):
             room_id = room_identifier
             try:
                 remote_room_hosts = request.args["server_name"]
-            except:
+            except Exception:
                 remote_room_hosts = None
         elif RoomAlias.is_valid(room_identifier):
             handler = self.handlers.room_member_handler
@@ -587,7 +587,7 @@ class RoomMembershipRestServlet(ClientV1RestServlet):
 
         try:
             content = parse_json_object_from_request(request)
-        except:
+        except Exception:
             # Turns out we used to ignore the body entirely, and some clients
             # cheekily send invalid bodies.
             content = {}
diff --git a/synapse/rest/client/v2_alpha/filter.py b/synapse/rest/client/v2_alpha/filter.py
index d2b2fd66e67f1e1d4ed0701a1184a561fa481aa3..1b9dc4528d8b30485c617a333ce5831a1bad0f90 100644
--- a/synapse/rest/client/v2_alpha/filter.py
+++ b/synapse/rest/client/v2_alpha/filter.py
@@ -50,7 +50,7 @@ class GetFilterRestServlet(RestServlet):
 
         try:
             filter_id = int(filter_id)
-        except:
+        except Exception:
             raise SynapseError(400, "Invalid filter_id")
 
         try:
diff --git a/synapse/rest/client/v2_alpha/sync.py b/synapse/rest/client/v2_alpha/sync.py
index a1e0e53b33904a37ef40e02a17295a926606126b..a0a8e4b8e46c6af7498c2883ddebc6f4c41e72d1 100644
--- a/synapse/rest/client/v2_alpha/sync.py
+++ b/synapse/rest/client/v2_alpha/sync.py
@@ -125,7 +125,7 @@ class SyncRestServlet(RestServlet):
                     filter_object = json.loads(filter_id)
                     set_timeline_upper_limit(filter_object,
                                              self.hs.config.filter_timeline_limit)
-                except:
+                except Exception:
                     raise SynapseError(400, "Invalid filter JSON")
                 self.filtering.check_valid_filter(filter_object)
                 filter = FilterCollection(filter_object)
diff --git a/synapse/rest/client/v2_alpha/user_directory.py b/synapse/rest/client/v2_alpha/user_directory.py
index 6e012da4aaa4d173c5fd09e5465db93eb35d8afe..2d4a43c353475ecea47be0dbf6820aca637cdbde 100644
--- a/synapse/rest/client/v2_alpha/user_directory.py
+++ b/synapse/rest/client/v2_alpha/user_directory.py
@@ -65,7 +65,7 @@ class UserDirectorySearchRestServlet(RestServlet):
 
         try:
             search_term = body["search_term"]
-        except:
+        except Exception:
             raise SynapseError(400, "`search_term` is required field")
 
         results = yield self.user_directory_handler.search_users(
diff --git a/synapse/rest/key/v2/remote_key_resource.py b/synapse/rest/key/v2/remote_key_resource.py
index 9fe201365708085b112eb047784ab1e37f291f86..cc2842aa7284844d119234a327f409fe1e1bbe18 100644
--- a/synapse/rest/key/v2/remote_key_resource.py
+++ b/synapse/rest/key/v2/remote_key_resource.py
@@ -213,7 +213,7 @@ class RemoteKey(Resource):
                     )
                 except KeyLookupError as e:
                     logger.info("Failed to fetch key: %s", e)
-                except:
+                except Exception:
                     logger.exception("Failed to get key for %r", server_name)
             yield self.query_keys(
                 request, query, query_remote_on_cache_miss=False
diff --git a/synapse/rest/media/v1/_base.py b/synapse/rest/media/v1/_base.py
index bce077becf629e76d9909d6f887922c338e89417..95fa95fce3279e1f34d851e49a1c1b82d949711c 100644
--- a/synapse/rest/media/v1/_base.py
+++ b/synapse/rest/media/v1/_base.py
@@ -45,7 +45,7 @@ def parse_media_id(request):
             except UnicodeDecodeError:
                 pass
         return server_name, media_id, file_name
-    except:
+    except Exception:
         raise SynapseError(
             404,
             "Invalid media id token %r" % (request.postpath,),
diff --git a/synapse/rest/media/v1/media_repository.py b/synapse/rest/media/v1/media_repository.py
index 6b50b45b1f11a8c83b2c875dc6105d48740bf483..eed9056a2ff7b068c396d8675665e44ed423ff04 100644
--- a/synapse/rest/media/v1/media_repository.py
+++ b/synapse/rest/media/v1/media_repository.py
@@ -310,7 +310,7 @@ class MediaRepository(object):
                 media_length=length,
                 filesystem_id=file_id,
             )
-        except:
+        except Exception:
             os.remove(fname)
             raise
 
diff --git a/synapse/rest/media/v1/preview_url_resource.py b/synapse/rest/media/v1/preview_url_resource.py
index 2a3e37fdf40cdcbff6ba163027793cbdb94c47cc..80114fca0d099fd7b730c40b21d5b31767368e42 100644
--- a/synapse/rest/media/v1/preview_url_resource.py
+++ b/synapse/rest/media/v1/preview_url_resource.py
@@ -367,7 +367,7 @@ class PreviewUrlResource(Resource):
                 dirs = self.filepaths.url_cache_filepath_dirs_to_delete(media_id)
                 for dir in dirs:
                     os.rmdir(dir)
-            except:
+            except Exception:
                 pass
 
         yield self.store.delete_url_cache(removed_media)
@@ -397,7 +397,7 @@ class PreviewUrlResource(Resource):
                 dirs = self.filepaths.url_cache_filepath_dirs_to_delete(media_id)
                 for dir in dirs:
                     os.rmdir(dir)
-            except:
+            except Exception:
                 pass
 
             thumbnail_dir = self.filepaths.url_cache_thumbnail_directory(media_id)
@@ -415,7 +415,7 @@ class PreviewUrlResource(Resource):
                 dirs = self.filepaths.url_cache_thumbnail_dirs_to_delete(media_id)
                 for dir in dirs:
                     os.rmdir(dir)
-            except:
+            except Exception:
                 pass
 
         yield self.store.delete_url_cache_media(removed_media)
diff --git a/synapse/state.py b/synapse/state.py
index dcdcdef65e5b46e735dd205f3862b71fb9505235..9e624b4937c3e1fa5f95136b680f8a8e659995c1 100644
--- a/synapse/state.py
+++ b/synapse/state.py
@@ -560,7 +560,7 @@ def _resolve_with_state(unconflicted_state_ids, conflicted_state_ds, auth_event_
         resolved_state = _resolve_state_events(
             conflicted_state, auth_events
         )
-    except:
+    except Exception:
         logger.exception("Failed to resolve state")
         raise
 
diff --git a/synapse/storage/_base.py b/synapse/storage/_base.py
index 5124a833a53b7a14026d6e6a0fd879415fa89132..6caf7b33565be508d12af6bdcd89a2ab8c4a7fa5 100644
--- a/synapse/storage/_base.py
+++ b/synapse/storage/_base.py
@@ -103,7 +103,7 @@ class LoggingTransaction(object):
                     "[SQL values] {%s} %r",
                     self.name, args[0]
                 )
-            except:
+            except Exception:
                 # Don't let logging failures stop SQL from working
                 pass
 
diff --git a/synapse/storage/background_updates.py b/synapse/storage/background_updates.py
index 7157fb1dfbc2b41eeca15215c1c02332fe728815..a6e6f52a6a1115c38d573bbd00c171d4d394253d 100644
--- a/synapse/storage/background_updates.py
+++ b/synapse/storage/background_updates.py
@@ -98,7 +98,7 @@ class BackgroundUpdateStore(SQLBaseStore):
                 result = yield self.do_next_background_update(
                     self.BACKGROUND_UPDATE_DURATION_MS
                 )
-            except:
+            except Exception:
                 logger.exception("Error doing update")
             else:
                 if result is None:
diff --git a/synapse/storage/events.py b/synapse/storage/events.py
index 637640ec2a755c82440cf128da990c3c27da0329..4298d8baf1e91aebd9fbcd0a2b4511d4a54104bf 100644
--- a/synapse/storage/events.py
+++ b/synapse/storage/events.py
@@ -1481,7 +1481,7 @@ class EventsStore(SQLBaseStore):
                                         for i in ids
                                         if i in res
                                     ])
-                            except:
+                            except Exception:
                                 logger.exception("Failed to callback")
                 with PreserveLoggingContext():
                     reactor.callFromThread(fire, event_list, row_dict)
diff --git a/synapse/storage/prepare_database.py b/synapse/storage/prepare_database.py
index ccaaabcfa0e4433e43819eaa27aa3715defe742d..817c2185c8aab274a7bcc5242cf274f64709de88 100644
--- a/synapse/storage/prepare_database.py
+++ b/synapse/storage/prepare_database.py
@@ -66,7 +66,7 @@ def prepare_database(db_conn, database_engine, config):
 
         cur.close()
         db_conn.commit()
-    except:
+    except Exception:
         db_conn.rollback()
         raise
 
diff --git a/synapse/storage/roommember.py b/synapse/storage/roommember.py
index a0fc9a6867d8fde5925f9153576cc62df466687b..3fa8019eb7d76f0b72dca99a644d1311081376d5 100644
--- a/synapse/storage/roommember.py
+++ b/synapse/storage/roommember.py
@@ -636,7 +636,7 @@ class RoomMemberStore(SQLBaseStore):
                 room_id = row["room_id"]
                 try:
                     content = json.loads(row["content"])
-                except:
+                except Exception:
                     continue
 
                 display_name = content.get("displayname", None)
diff --git a/synapse/storage/schema/delta/30/as_users.py b/synapse/storage/schema/delta/30/as_users.py
index 5b7d8d1ab5cf3be9c438a0c12dfaf421ed3b2c2a..c53e53c94ffdda6da85be21b24f5adc55fa45ada 100644
--- a/synapse/storage/schema/delta/30/as_users.py
+++ b/synapse/storage/schema/delta/30/as_users.py
@@ -22,7 +22,7 @@ def run_create(cur, database_engine, *args, **kwargs):
     # NULL indicates user was not registered by an appservice.
     try:
         cur.execute("ALTER TABLE users ADD COLUMN appservice_id TEXT")
-    except:
+    except Exception:
         # Maybe we already added the column? Hope so...
         pass
 
diff --git a/synapse/storage/search.py b/synapse/storage/search.py
index 8f2b3c4435bf06f7a1384d3655c29ec19a47e7cb..05d4ef586eb6310cc830c27ae80bf35380a952ec 100644
--- a/synapse/storage/search.py
+++ b/synapse/storage/search.py
@@ -81,7 +81,7 @@ class SearchStore(BackgroundUpdateStore):
                     etype = row["type"]
                     try:
                         content = json.loads(row["content"])
-                    except:
+                    except Exception:
                         continue
 
                     if etype == "m.room.message":
@@ -407,7 +407,7 @@ class SearchStore(BackgroundUpdateStore):
                 origin_server_ts, stream = pagination_token.split(",")
                 origin_server_ts = int(origin_server_ts)
                 stream = int(stream)
-            except:
+            except Exception:
                 raise SynapseError(400, "Invalid pagination token")
 
             clauses.append(
diff --git a/synapse/streams/config.py b/synapse/streams/config.py
index 4f089bfb941945d1d6a0912b5edafad9c1103561..ca78e551cb48461d50487293ad90371087b7f0a8 100644
--- a/synapse/streams/config.py
+++ b/synapse/streams/config.py
@@ -80,13 +80,13 @@ class PaginationConfig(object):
                 from_tok = None  # For backwards compat.
             elif from_tok:
                 from_tok = StreamToken.from_string(from_tok)
-        except:
+        except Exception:
             raise SynapseError(400, "'from' paramater is invalid")
 
         try:
             if to_tok:
                 to_tok = StreamToken.from_string(to_tok)
-        except:
+        except Exception:
             raise SynapseError(400, "'to' paramater is invalid")
 
         limit = get_param("limit", None)
@@ -98,7 +98,7 @@ class PaginationConfig(object):
 
         try:
             return PaginationConfig(from_tok, to_tok, direction, limit)
-        except:
+        except Exception:
             logger.exception("Failed to create pagination config")
             raise SynapseError(400, "Invalid request.")
 
diff --git a/synapse/types.py b/synapse/types.py
index 1eeda0b72ff10facc3476b434607d11523b8cb5f..6e76c016d92bc1fbb08f834e5f8ea73533cad18c 100644
--- a/synapse/types.py
+++ b/synapse/types.py
@@ -127,7 +127,7 @@ class DomainSpecificString(
         try:
             cls.from_string(s)
             return True
-        except:
+        except Exception:
             return False
 
     __str__ = to_string
@@ -213,7 +213,7 @@ class StreamToken(
                 # i.e. old token from before receipt_key
                 keys.append("0")
             return cls(*keys)
-        except:
+        except Exception:
             raise SynapseError(400, "Invalid Token")
 
     def to_string(self):
@@ -299,7 +299,7 @@ class RoomStreamToken(namedtuple("_StreamToken", "topological stream")):
             if string[0] == 't':
                 parts = string[1:].split('-', 1)
                 return cls(topological=int(parts[0]), stream=int(parts[1]))
-        except:
+        except Exception:
             pass
         raise SynapseError(400, "Invalid token %r" % (string,))
 
@@ -308,7 +308,7 @@ class RoomStreamToken(namedtuple("_StreamToken", "topological stream")):
         try:
             if string[0] == 's':
                 return cls(topological=None, stream=int(string[1:]))
-        except:
+        except Exception:
             pass
         raise SynapseError(400, "Invalid token %r" % (string,))
 
diff --git a/synapse/util/__init__.py b/synapse/util/__init__.py
index 2a2360ab5d6782f5ab3dc606dd2af437b52b3556..cd1ce62bdb2640be5b622b6ec1bb3b7936998bfb 100644
--- a/synapse/util/__init__.py
+++ b/synapse/util/__init__.py
@@ -82,7 +82,7 @@ class Clock(object):
     def cancel_call_later(self, timer, ignore_errs=False):
         try:
             timer.cancel()
-        except:
+        except Exception:
             if not ignore_errs:
                 raise
 
@@ -97,12 +97,12 @@ class Clock(object):
 
             try:
                 ret_deferred.errback(e)
-            except:
+            except Exception:
                 pass
 
             try:
                 given_deferred.cancel()
-            except:
+            except Exception:
                 pass
 
         timer = None
@@ -110,7 +110,7 @@ class Clock(object):
         def cancel(res):
             try:
                 self.cancel_call_later(timer)
-            except:
+            except Exception:
                 pass
             return res
 
@@ -119,7 +119,7 @@ class Clock(object):
         def success(res):
             try:
                 ret_deferred.callback(res)
-            except:
+            except Exception:
                 pass
 
             return res
@@ -127,7 +127,7 @@ class Clock(object):
         def err(res):
             try:
                 ret_deferred.errback(res)
-            except:
+            except Exception:
                 pass
 
         given_deferred.addCallbacks(callback=success, errback=err)
diff --git a/synapse/util/async.py b/synapse/util/async.py
index a0a9039475d3d115430679c5eeca3f555b0b7882..1a884e96ee29de3495cf3ce972359eed8d10070d 100644
--- a/synapse/util/async.py
+++ b/synapse/util/async.py
@@ -73,7 +73,7 @@ class ObservableDeferred(object):
                 try:
                     # TODO: Handle errors here.
                     self._observers.pop().callback(r)
-                except:
+                except Exception:
                     pass
             return r
 
@@ -83,7 +83,7 @@ class ObservableDeferred(object):
                 try:
                     # TODO: Handle errors here.
                     self._observers.pop().errback(f)
-                except:
+                except Exception:
                     pass
 
             if consumeErrors:
@@ -205,7 +205,7 @@ class Linearizer(object):
             try:
                 with PreserveLoggingContext():
                     yield current_defer
-            except:
+            except Exception:
                 logger.exception("Unexpected exception in Linearizer")
 
             logger.info("Acquired linearizer lock %r for key %r", self.name,
diff --git a/synapse/util/logcontext.py b/synapse/util/logcontext.py
index 990216145e671dc20e352243fdf1d84299875157..9683cc726541e148e28ab54a1916c9b93d808b81 100644
--- a/synapse/util/logcontext.py
+++ b/synapse/util/logcontext.py
@@ -42,7 +42,7 @@ try:
 
     def get_thread_resource_usage():
         return resource.getrusage(RUSAGE_THREAD)
-except:
+except Exception:
     # If the system doesn't support resource.getrusage(RUSAGE_THREAD) then we
     # won't track resource usage by returning None.
     def get_thread_resource_usage():
diff --git a/synapse/util/retryutils.py b/synapse/util/retryutils.py
index 4fa9d1a03c706492823df56b87518cbd907d1f10..1adedbb3611983df3deda942f5611a1f3b542f24 100644
--- a/synapse/util/retryutils.py
+++ b/synapse/util/retryutils.py
@@ -189,7 +189,7 @@ class RetryDestinationLimiter(object):
                 yield self.store.set_destination_retry_timings(
                     self.destination, retry_last_ts, self.retry_interval
                 )
-            except:
+            except Exception:
                 logger.exception(
                     "Failed to store set_destination_retry_timings",
                 )
diff --git a/tests/storage/test_appservice.py b/tests/storage/test_appservice.py
index 9e98d0e3308e4e17edb28b40c26e9714a0878b18..79f569e787f506b868e33513347c45924ecbb7f2 100644
--- a/tests/storage/test_appservice.py
+++ b/tests/storage/test_appservice.py
@@ -65,7 +65,7 @@ class ApplicationServiceStoreTestCase(unittest.TestCase):
         for f in self.as_yaml_files:
             try:
                 os.remove(f)
-            except:
+            except Exception:
                 pass
 
     def _add_appservice(self, as_token, id, url, hs_token, sender):
diff --git a/tests/utils.py b/tests/utils.py
index 3c81a3e16dba796f8cc9dffb43952c482254f500..d2ebce4b2ed19b4114488e4fc1655b7ec188185e 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -184,7 +184,7 @@ class MockHttpResource(HttpServer):
             mock_request.args = urlparse.parse_qs(path.split('?')[1])
             mock_request.path = path.split('?')[0]
             path = mock_request.path
-        except:
+        except Exception:
             pass
 
         for (method, pattern, func) in self.callbacks:
@@ -364,13 +364,13 @@ class MemoryDataStore(object):
             return {
                 "name": self.tokens_to_users[token],
             }
-        except:
+        except Exception:
             raise StoreError(400, "User does not exist.")
 
     def get_room(self, room_id):
         try:
             return self.rooms[room_id]
-        except:
+        except Exception:
             return None
 
     def store_room(self, room_id, room_creator_user_id, is_public):
@@ -499,7 +499,7 @@ class DeferredMockCallable(object):
         for _, _, d in self.expectations:
             try:
                 d.errback(failure)
-            except:
+            except Exception:
                 pass
 
         raise failure