diff --git a/command.py b/command.py
index e17f0ab..5a5f468 100644
--- a/command.py
+++ b/command.py
@@ -123,6 +123,11 @@
     result.sort(key=_getpath)
     return result
 
+# pylint: disable-msg=W0223
+# Pylint warns that the `InteractiveCommand` and `PagedCommand` classes do not
+# override method `Execute` which is abstract in `Command`.  Since that method
+# is always implemented in classes derived from `InteractiveCommand` and
+# `PagedCommand`, this warning can be suppressed.
 class InteractiveCommand(Command):
   """Command which requires user interaction on the tty and
      must not run within a pager, even if the user asks to.
@@ -137,6 +142,8 @@
   def WantPager(self, opt):
     return True
 
+# pylint: enable-msg=W0223
+
 class MirrorSafeCommand(object):
   """Command permits itself to run within a mirror,
      and does not require a working directory.
diff --git a/error.py b/error.py
index 783ab7d..2148248 100644
--- a/error.py
+++ b/error.py
@@ -25,6 +25,7 @@
   """Unspecified error from the user's text editor.
   """
   def __init__(self, reason):
+    super(EditorError, self).__init__()
     self.reason = reason
 
   def __str__(self):
@@ -34,6 +35,7 @@
   """Unspecified internal error from git.
   """
   def __init__(self, command):
+    super(GitError, self).__init__()
     self.command = command
 
   def __str__(self):
@@ -43,6 +45,7 @@
   """A bundle upload to Gerrit did not succeed.
   """
   def __init__(self, reason):
+    super(UploadError, self).__init__()
     self.reason = reason
 
   def __str__(self):
@@ -52,6 +55,7 @@
   """Cannot download a repository.
   """
   def __init__(self, reason):
+    super(DownloadError, self).__init__()
     self.reason = reason
 
   def __str__(self):
@@ -61,6 +65,7 @@
   """A specified project does not exist in the work tree.
   """
   def __init__(self, name=None):
+    super(NoSuchProjectError, self).__init__()
     self.name = name
 
   def __str__(self):
@@ -73,6 +78,7 @@
   """A specified project is not suitable for the specified groups
   """
   def __init__(self, name=None):
+    super(InvalidProjectGroupsError, self).__init__()
     self.name = name
 
   def __str__(self):
@@ -86,6 +92,7 @@
      use exec to re-execute repo with the new code and manifest.
   """
   def __init__(self, extra_args=None):
+    super(RepoChangedException, self).__init__()
     self.extra_args = extra_args or []
 
 class HookError(Exception):
@@ -93,4 +100,3 @@
 
   The common case is that the file wasn't present when we tried to run it.
   """
-  pass
diff --git a/main.py b/main.py
index 34dd27d..278fd36 100755
--- a/main.py
+++ b/main.py
@@ -45,7 +45,7 @@
 from manifest_xml import XmlManifest
 from pager import RunPager
 
-from subcmds import all as all_commands
+from subcmds import all_commands
 
 global_options = optparse.OptionParser(
                  usage="repo [-p|--paginate|--no-pager] COMMAND [ARGS]"
diff --git a/manifest_xml.py b/manifest_xml.py
index 1207244..04cabaa 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -321,7 +321,8 @@
       raise ManifestParseError("no <manifest> in %s" % (path,))
 
     nodes = []
-    for node in manifest.childNodes:
+    for node in manifest.childNodes:  # pylint:disable-msg=W0631
+                                      # We only get here if manifest is initialised
         if node.nodeName == 'include':
             name = self._reqatt(node, 'name')
             fp = os.path.join(include_root, name)
diff --git a/project.py b/project.py
index 96ab907..472b1d3 100644
--- a/project.py
+++ b/project.py
@@ -724,17 +724,25 @@
     paths.sort()
 
     for p in paths:
-      try: i = di[p]
-      except KeyError: i = None
+      try:
+        i = di[p]
+      except KeyError:
+        i = None
 
-      try: f = df[p]
-      except KeyError: f = None
+      try:
+        f = df[p]
+      except KeyError:
+        f = None
 
-      if i: i_status = i.status.upper()
-      else: i_status = '-'
+      if i:
+        i_status = i.status.upper()
+      else:
+        i_status = '-'
 
-      if f: f_status = f.status.lower()
-      else: f_status = '-'
+      if f:
+        f_status = f.status.lower()
+      else:
+        f_status = '-'
 
       if i and i.src_path:
         line = ' %s%s\t%s => %s (%s%%)' % (i_status, f_status,
diff --git a/subcmds/__init__.py b/subcmds/__init__.py
index a2286e7..1fac802 100644
--- a/subcmds/__init__.py
+++ b/subcmds/__init__.py
@@ -15,7 +15,7 @@
 
 import os
 
-all = {}
+all_commands = {}
 
 my_dir = os.path.dirname(__file__)
 for py in os.listdir(my_dir):
@@ -43,7 +43,7 @@
 
     name = name.replace('_', '-')
     cmd.NAME = name
-    all[name] = cmd
+    all_commands[name] = cmd
 
-if 'help' in all:
-  all['help'].commands = all
+if 'help' in all_commands:
+  all_commands['help'].commands = all_commands
diff --git a/subcmds/abandon.py b/subcmds/abandon.py
index 42abb2f..e17ab2b 100644
--- a/subcmds/abandon.py
+++ b/subcmds/abandon.py
@@ -42,10 +42,10 @@
     nb = args[0]
     err = []
     success = []
-    all = self.GetProjects(args[1:])
+    all_projects = self.GetProjects(args[1:])
 
-    pm = Progress('Abandon %s' % nb, len(all))
-    for project in all:
+    pm = Progress('Abandon %s' % nb, len(all_projects))
+    for project in all_projects:
       pm.update()
 
       status = project.AbandonBranch(nb)
diff --git a/subcmds/branches.py b/subcmds/branches.py
index 81aa5b1..a7ba3d6 100644
--- a/subcmds/branches.py
+++ b/subcmds/branches.py
@@ -93,17 +93,17 @@
   def Execute(self, opt, args):
     projects = self.GetProjects(args)
     out = BranchColoring(self.manifest.manifestProject.config)
-    all = {}
+    all_branches = {}
     project_cnt = len(projects)
 
     for project in projects:
       for name, b in project.GetBranches().iteritems():
         b.project = project
-        if name not in all:
-          all[name] = BranchInfo(name)
-        all[name].add(b)
+        if name not in all_branches:
+          all_branches[name] = BranchInfo(name)
+        all_branches[name].add(b)
 
-    names = all.keys()
+    names = all_branches.keys()
     names.sort()
 
     if not names:
@@ -116,7 +116,7 @@
         width = len(name)
 
     for name in names:
-      i = all[name]
+      i = all_branches[name]
       in_cnt = len(i.projects)
 
       if i.IsCurrent:
diff --git a/subcmds/checkout.py b/subcmds/checkout.py
index 533d20e..bfbe992 100644
--- a/subcmds/checkout.py
+++ b/subcmds/checkout.py
@@ -39,10 +39,10 @@
     nb = args[0]
     err = []
     success = []
-    all = self.GetProjects(args[1:])
+    all_projects = self.GetProjects(args[1:])
 
-    pm = Progress('Checkout %s' % nb, len(all))
-    for project in all:
+    pm = Progress('Checkout %s' % nb, len(all_projects))
+    for project in all_projects:
       pm.update()
 
       status = project.CheckoutBranch(nb)
diff --git a/subcmds/forall.py b/subcmds/forall.py
index 76a0268..2ece95e 100644
--- a/subcmds/forall.py
+++ b/subcmds/forall.py
@@ -141,12 +141,16 @@
       for cn in cmd[1:]:
         if not cn.startswith('-'):
           break
-      if cn in _CAN_COLOR:
+      else:
+        cn = None
+      # pylint: disable-msg=W0631
+      if cn and cn in _CAN_COLOR:
         class ColorCmd(Coloring):
           def __init__(self, config, cmd):
             Coloring.__init__(self, config, cmd)
         if ColorCmd(self.manifest.manifestProject.config, cn).is_on:
           cmd.insert(cmd.index(cn) + 1, '--color')
+      # pylint: enable-msg=W0631
 
     mirror = self.manifest.IsMirror
     out = ForallColoring(self.manifest.manifestProject.config)
