diff --git a/.pylintrc b/.pylintrc
index da2081b87e12f048fc0278dfc43785a29e4ded8c..f7cf0588ac8976a6c4e613cd85992542541d576b 100644
--- a/.pylintrc
+++ b/.pylintrc
@@ -1,3 +1,8 @@
+[VARIABLES]
+# TODO(https://github.com/PyCQA/pylint/issues/1345): How does the inspection
+# not include "unused_" and "ignored_" by default?
+dummy-variables-rgx=^ignored_|^unused_
+
 [MESSAGES CONTROL]
 
 #TODO: Enable missing-docstring
@@ -15,9 +20,7 @@
 #TODO: Enable wrong-import-order
 #TODO: Enable no-value-for-parameter
 #TODO: Enable cyclic-import
-#TODO: Enable unused-variable
 #TODO: Enable redefined-outer-name
-#TODO: Enable unused-import
 #TODO: Enable too-many-instance-attributes
 #TODO: Enable broad-except
 #TODO: Enable too-many-locals
@@ -29,6 +32,5 @@
 #TODO: Enable too-many-return-statements
 #TODO: Enable too-many-nested-blocks
 #TODO: Enable super-init-not-called
-#TODO: Enable no-self-use
 
-disable=missing-docstring,too-few-public-methods,too-many-arguments,no-init,duplicate-code,invalid-name,suppressed-message,locally-disabled,protected-access,no-name-in-module,unused-argument,fixme,wrong-import-order,no-value-for-parameter,cyclic-import,unused-variable,redefined-outer-name,unused-import,too-many-instance-attributes,broad-except,too-many-locals,too-many-lines,redefined-variable-type,next-method-called,import-error,useless-else-on-loop,too-many-return-statements,too-many-nested-blocks,super-init-not-called,no-self-use
+disable=missing-docstring,too-few-public-methods,too-many-arguments,no-init,duplicate-code,invalid-name,suppressed-message,locally-disabled,protected-access,no-name-in-module,unused-argument,fixme,wrong-import-order,no-value-for-parameter,cyclic-import,redefined-outer-name,too-many-instance-attributes,broad-except,too-many-locals,too-many-lines,redefined-variable-type,next-method-called,import-error,useless-else-on-loop,too-many-return-statements,too-many-nested-blocks,super-init-not-called
diff --git a/src/python/grpcio/grpc/_auth.py b/src/python/grpcio/grpc/_auth.py
index 21131f85f1712d811c1c54de9b0bee2f57463d94..3e7250e85e456fe52164de25f25c5c1af6dad438 100644
--- a/src/python/grpcio/grpc/_auth.py
+++ b/src/python/grpcio/grpc/_auth.py
@@ -39,6 +39,19 @@ def _sign_request(callback, token, error):
     callback(metadata, error)
 
 
+def _create_get_token_callback(callback):
+
+    def get_token_callback(future):
+        try:
+            access_token = future.result().access_token
+        except Exception as exception:
+            _sign_request(callback, None, exception)
+        else:
+            _sign_request(callback, access_token, None)
+
+    return get_token_callback
+
+
 class GoogleCallCredentials(grpc.AuthMetadataPlugin):
     """Metadata wrapper for GoogleCredentials from the oauth2client library."""
 
@@ -59,16 +72,7 @@ class GoogleCallCredentials(grpc.AuthMetadataPlugin):
                 additional_claims={'aud': context.service_url})
         else:
             future = self._pool.submit(self._credentials.get_access_token)
-        future.add_done_callback(
-            lambda x: self._get_token_callback(callback, x))
-
-    def _get_token_callback(self, callback, future):
-        try:
-            access_token = future.result().access_token
-        except Exception as e:
-            _sign_request(callback, None, e)
-        else:
-            _sign_request(callback, access_token, None)
+        future.add_done_callback(_create_get_token_callback(callback))
 
     def __del__(self):
         self._pool.shutdown(wait=False)
diff --git a/src/python/grpcio/grpc/_channel.py b/src/python/grpcio/grpc/_channel.py
index af86f5eabe3aa12385742ed017ddf91149bac587..2480f9b174e293d2e03dfe754a6103c8652083d8 100644
--- a/src/python/grpcio/grpc/_channel.py
+++ b/src/python/grpcio/grpc/_channel.py
@@ -200,7 +200,7 @@ def _consume_request_iterator(request_iterator, state, call,
                 request = next(request_iterator)
             except StopIteration:
                 break
-            except Exception as e:
+            except Exception:
                 logging.exception("Exception iterating requests!")
                 call.cancel()
                 _abort(state, grpc.StatusCode.UNKNOWN,
diff --git a/src/python/grpcio/grpc/_server.py b/src/python/grpcio/grpc/_server.py
index b8e7ea17f708b3252514e51174e125343505ed1c..8dc956a374951e96ee6cc05347f1df0e9c89c1e5 100644
--- a/src/python/grpcio/grpc/_server.py
+++ b/src/python/grpcio/grpc/_server.py
@@ -342,7 +342,7 @@ def _unary_request(rpc_event, state, request_deserializer):
             if state.client is _CANCELLED or state.statused:
                 return None
             else:
-                start_server_batch_result = rpc_event.operation_call.start_server_batch(
+                rpc_event.operation_call.start_server_batch(
                     cygrpc.Operations(
                         (cygrpc.operation_receive_message(_EMPTY_FLAGS),)),
                     _receive_message(state, rpc_event.operation_call,
diff --git a/src/python/grpcio/grpc/beta/_client_adaptations.py b/src/python/grpcio/grpc/beta/_client_adaptations.py
index b53395e2a2e92974e035acc26fe3fff61c0572ab..a8f2bf7642af93ea594cdb660a6da4cf9b28e6c0 100644
--- a/src/python/grpcio/grpc/beta/_client_adaptations.py
+++ b/src/python/grpcio/grpc/beta/_client_adaptations.py
@@ -30,7 +30,6 @@
 
 import grpc
 from grpc import _common
-from grpc._cython import cygrpc
 from grpc.beta import interfaces
 from grpc.framework.common import cardinality
 from grpc.framework.foundation import future
diff --git a/src/python/grpcio/grpc/beta/implementations.py b/src/python/grpcio/grpc/beta/implementations.py
index 7093852278112c69b1dad8fe06c79645bc09764c..af31e38a5453c2f0548f8f31530f4c013b1e64e0 100644
--- a/src/python/grpcio/grpc/beta/implementations.py
+++ b/src/python/grpcio/grpc/beta/implementations.py
@@ -29,16 +29,15 @@
 """Entry points into the Beta API of gRPC Python."""
 
 # threading is referenced from specification in this module.
-import abc
-import enum
 import threading  # pylint: disable=unused-import
 
-# cardinality and face are referenced from specification in this module.
+# interfaces, cardinality, and face are referenced from specification in this
+# module.
 import grpc
 from grpc import _auth
 from grpc.beta import _client_adaptations
 from grpc.beta import _server_adaptations
-from grpc.beta import interfaces
+from grpc.beta import interfaces  # pylint: disable=unused-import
 from grpc.framework.common import cardinality  # pylint: disable=unused-import
 from grpc.framework.interfaces.face import face  # pylint: disable=unused-import
 
diff --git a/src/python/grpcio/grpc/framework/foundation/logging_pool.py b/src/python/grpcio/grpc/framework/foundation/logging_pool.py
index 7ee37373fa185fb41eacdbcd754dd22ca4160f9a..0912fba13941c063dbe92a17c4dd459828cc0f02 100644
--- a/src/python/grpcio/grpc/framework/foundation/logging_pool.py
+++ b/src/python/grpcio/grpc/framework/foundation/logging_pool.py
@@ -39,7 +39,7 @@ def _wrap(behavior):
     def _wrapping(*args, **kwargs):
         try:
             return behavior(*args, **kwargs)
-        except Exception as e:
+        except Exception:
             logging.exception(
                 'Unexpected exception from %s executed in logging pool!',
                 behavior)