diff --git a/appengine/chromiumos-build-stats/stats.py b/appengine/chromiumos-build-stats/stats.py
index 995ae02..083ba95 100644
--- a/appengine/chromiumos-build-stats/stats.py
+++ b/appengine/chromiumos-build-stats/stats.py
@@ -116,7 +116,7 @@
     error_msg = None
     try:
       stat_entries = model.Statistics.gql(query, DATASTORE_KEY)
-    except datastore_errors.BadQueryError, ex:
+    except datastore_errors.BadQueryError as ex:
       error_msg = '<p>%s.</p><p>Actual GCL query used: "%s"</p>' % (ex, query)
 
     results_html_table = self._PrepareResultsTable(stat_entries, columns,
diff --git a/buildbot/cbuildbot_commands.py b/buildbot/cbuildbot_commands.py
index ef81e4f..9a1cba2 100644
--- a/buildbot/cbuildbot_commands.py
+++ b/buildbot/cbuildbot_commands.py
@@ -167,7 +167,7 @@
       try:
         if os.path.isdir(cwd):
           git.CleanAndCheckoutUpstream(cwd, False)
-      except cros_build_lib.RunCommandError, e:
+      except cros_build_lib.RunCommandError as e:
         result = e.result
         logging.warn('\n%s', result.error)
         logging.warn('Deleting %s because %s failed', cwd, e.result.cmd)
diff --git a/buildbot/cbuildbot_stages.py b/buildbot/cbuildbot_stages.py
index a817a45..78dd480 100644
--- a/buildbot/cbuildbot_stages.py
+++ b/buildbot/cbuildbot_stages.py
@@ -423,7 +423,7 @@
         manifest = git.ManifestCheckout.Cached(self._build_root, search=False)
       except (KeyboardInterrupt, MemoryError, SystemExit):
         raise
-      except Exception, e:
+      except Exception as e:
         # Either there is no repo there, or the manifest isn't usable.  If the
         # directory exists, log the exception for debugging reasons.  Either
         # way, the checkout needs to be wiped since it's in an unknown
diff --git a/buildbot/repository.py b/buildbot/repository.py
index 7f53e7f..b79ef25 100755
--- a/buildbot/repository.py
+++ b/buildbot/repository.py
@@ -350,7 +350,7 @@
       self._EnsureMirroring(True)
       self._DoCleanup()
 
-    except cros_build_lib.RunCommandError, e:
+    except cros_build_lib.RunCommandError as e:
       err_msg = e.Stringify(error=False, output=False)
       logging.error(err_msg)
       raise SrcCheckOutException(err_msg)
diff --git a/buildbot/tee.py b/buildbot/tee.py
index 3641d31..a432070 100644
--- a/buildbot/tee.py
+++ b/buildbot/tee.py
@@ -133,7 +133,7 @@
       failed = False
     except ToldToDie:
       failed = False
-    except Exception, e:
+    except Exception as e:
       tb = traceback.format_exc()
       cros_build_lib.PrintBuildbotStepFailure(self._error_handle)
       self._error_handle.write(
@@ -148,7 +148,7 @@
       if failed:
         try:
           os.kill(self.master_pid, signal.SIGTERM)
-        except Exception, e:
+        except Exception as e:
           self._error_handle.write("\nTee failed signaling %s\n" % e)
 
       # Finally, kill ourself.
diff --git a/buildbot/validation_pool.py b/buildbot/validation_pool.py
index 2b4fb5e..f1ab321 100644
--- a/buildbot/validation_pool.py
+++ b/buildbot/validation_pool.py
@@ -205,13 +205,13 @@
   def f(self, parent, *args, **kwds):
     try:
       return functor(self, parent, *args, **kwds)
-    except gerrit.GerritException, e:
+    except gerrit.GerritException as e:
       if isinstance(e, gerrit.QueryNotSpecific):
         e = ("%s\nSuggest you use gerrit numbers instead (prefixed with a * "
              "if it's an internal change)." % e)
       new_exc = cros_patch.PatchException(parent, e)
       raise new_exc.__class__, new_exc, sys.exc_info()[2]
-    except cros_patch.PatchException, e:
+    except cros_patch.PatchException as e:
       if e.patch.id == parent.id:
         raise
       new_exc = cros_patch.DependencyError(parent, e)
@@ -590,7 +590,7 @@
           continue
         try:
           self._ResolveChange(dep, plan, stack, limit_to=limit_to)
-        except cros_patch.PatchException, e:
+        except cros_patch.PatchException as e:
           raise cros_patch.DependencyError, \
                 cros_patch.DependencyError(change, e), \
                 sys.exc_info()[2]
@@ -715,7 +715,7 @@
                         ', '.join(map(str, transaction_changes)))
           self._ApplyChanges(inducing_change, transaction_changes,
                              dryrun=dryrun)
-      except cros_patch.PatchException, e:
+      except cros_patch.PatchException as e:
         logging.info("Failed applying transaction for %s: %s",
                      inducing_change, e)
         failed.append(e)
@@ -827,7 +827,7 @@
 
       try:
         self.ApplyChange(change, dryrun=dryrun)
-      except cros_patch.PatchException, e:
+      except cros_patch.PatchException as e:
         if not e.inflight:
           self.failed_tot[change.id] = e
         raise
@@ -1366,7 +1366,7 @@
           self.changes, dryrun=self.dryrun, manifest=manifest)
     except (KeyboardInterrupt, RuntimeError, SystemExit):
       raise
-    except Exception, e:
+    except Exception as e:
       if mox is not None and isinstance(e, mox.Error):
         raise
 
@@ -1383,7 +1383,7 @@
       try:
         self._HandleApplyFailure(
             [InternalCQError(patch, msg) for patch in self.changes])
-      except Exception, e:
+      except Exception as e:
         if mox is None or not isinstance(e, mox.Error):
           # If it's not a mox error, let it fly.
           raise
@@ -1622,7 +1622,7 @@
     d = dict(build_log=self.build_log, queue=self.queue, **kwargs)
     try:
       msg %= d
-    except (TypeError, ValueError), e:
+    except (TypeError, ValueError) as e:
       logging.error(
           "Generation of message %s for change %s failed: dict was %r, "
           "exception %s", msg, change, d, e)
diff --git a/lib/cgroups.py b/lib/cgroups.py
index be1fc13..f64e2a4 100644
--- a/lib/cgroups.py
+++ b/lib/cgroups.py
@@ -261,7 +261,7 @@
     try:
       targets = [x for x in os.listdir(path)
                  if os.path.isdir(os.path.join(path, x))]
-    except EnvironmentError, e:
+    except EnvironmentError as e:
       if e.errno != errno.ENOENT:
         raise
 
@@ -307,7 +307,7 @@
     If the file doesn't exist, return the given default."""
     try:
       return osutils.ReadFile(os.path.join(self.path, key))
-    except EnvironmentError, e:
+    except EnvironmentError as e:
       if e.errno != errno.ENOENT:
         raise
       return default
@@ -402,7 +402,7 @@
     name = self._LimitName(key, True)
     try:
       return sudo.SetFileContents(name, value, cwd=os.path.dirname(name))
-    except cros_build_lib.RunCommandError, e:
+    except cros_build_lib.RunCommandError as e:
       if e.exception is not None:
         # Command failed before the exec itself; convert ENOENT
         # appropriately.
@@ -653,7 +653,7 @@
       # w/ procfs, and keep in mind that we have to work across multiple kernel
       # versions.
       cpuset = osutils.ReadFile('/proc/%s/cpuset' % (pid,)).rstrip('\n')
-    except EnvironmentError, e:
+    except EnvironmentError as e:
       if e.errno != errno.ENOENT:
         raise
       with open('/proc/%s/cgroup' % pid) as f:
diff --git a/lib/cleanup.py b/lib/cleanup.py
index a868221..956550b 100644
--- a/lib/cleanup.py
+++ b/lib/cleanup.py
@@ -75,7 +75,7 @@
     self._is_child = True
     try:
       self._lock.write_lock()
-    except BaseException, e:
+    except BaseException as e:
       print >> sys.stderr, ("EnforcedCleanupSection %s excepted(%r) attempting "
                             "to take the write lock; hard exiting." % (self, e))
       sys.stderr.flush()
diff --git a/lib/commandline.py b/lib/commandline.py
index 80c11b7..662a2c9 100644
--- a/lib/commandline.py
+++ b/lib/commandline.py
@@ -459,16 +459,16 @@
   ret = 1
   try:
     ret = target(argv[1:])
-  except _ShutDownException, e:
+  except _ShutDownException as e:
     sys.stdout.flush()
     print >> sys.stderr, ("%s: Signaled to shutdown: caught %i signal." %
                           (name, e.signal,))
     sys.stderr.flush()
-  except SystemExit, e:
+  except SystemExit as e:
     # Right now, let this crash through- longer term, we'll update the scripts
     # in question to not use sys.exit, and make this into a flagged error.
     raise
-  except Exception, e:
+  except Exception as e:
     sys.stdout.flush()
     print >> sys.stderr, ("%s: Unhandled exception:" % (name,))
     sys.stderr.flush()
diff --git a/lib/cros_build_lib.py b/lib/cros_build_lib.py
index 3e67f1d..f5d74f3 100644
--- a/lib/cros_build_lib.py
+++ b/lib/cros_build_lib.py
@@ -190,7 +190,7 @@
       if proc.poll() is None:
         # Still doesn't want to die.  Too bad, so sad, time to die.
         proc.kill()
-    except EnvironmentError, e:
+    except EnvironmentError as e:
       Warning('Ignoring unhandled exception in _KillChildProcess: %s', e)
 
     # Ensure our child process has been reaped.
@@ -228,7 +228,7 @@
 
     try:
       os.kill(self.pid, signum)
-    except EnvironmentError, e:
+    except EnvironmentError as e:
       if e.errno == errno.EPERM:
         # Kill returns either 0 (signal delivered), or 1 (signal wasn't
         # delivered).  This isn't particularly informative, but we still
@@ -323,7 +323,7 @@
   def _get_tempfile():
     try:
       return tempfile.TemporaryFile(bufsize=0)
-    except EnvironmentError, e:
+    except EnvironmentError as e:
       if e.errno != errno.ENOENT:
         raise
       # This can occur if we were pointed at a specific location for our
@@ -453,7 +453,7 @@
       if error_message:
         msg += '\n%s' % error_message
       raise RunCommandError(msg, cmd_result)
-  except OSError, e:
+  except OSError as e:
     estr = str(e)
     if e.errno == errno.EACCES:
       estr += '; does the program need `chmod a+x`?'
@@ -1243,7 +1243,7 @@
   try:
     return RunCommandWithRetries(5, cmd, sleep=3, retry_on=retriable_exits,
                                  **kwargs)
-  except RunCommandError, e:
+  except RunCommandError as e:
     code = e.result.returncode
     if code in (51, 58, 60):
       # These are the return codes of failing certs as per 'man curl'.
@@ -1252,7 +1252,7 @@
       try:
         return RunCommandWithRetries(5, cmd, sleep=60, retry_on=retriable_exits,
                                      **kwargs)
-      except RunCommandError, e:
+      except RunCommandError as e:
         Die("Curl failed w/ exit code %i", code)
 
 
@@ -1488,7 +1488,7 @@
           # Only strip quotes if the first & last one match.
           val = val[1:-1]
         d[chunks[0].strip()] = val
-  except EnvironmentError, e:
+  except EnvironmentError as e:
     if not (ignore_missing and e.errno == errno.ENOENT):
       raise
 
diff --git a/lib/cros_build_lib_unittest.py b/lib/cros_build_lib_unittest.py
index 430c978..08e42a8 100755
--- a/lib/cros_build_lib_unittest.py
+++ b/lib/cros_build_lib_unittest.py
@@ -596,7 +596,7 @@
         if full_path.endswith('/'):
           # we only want to create directories
           return
-      except OSError, err:
+      except OSError as err:
         if err.errno == errno.EEXIST:
           # we don't care if the dir already exists
           pass
@@ -628,7 +628,7 @@
   def testNoSuchDir(self):
     try:
       cros_build_lib.ListFiles(os.path.join(self.tempdir, 'missing'))
-    except OSError, err:
+    except OSError as err:
       self.assertEqual(err.errno, errno.ENOENT)
 
 
@@ -874,7 +874,7 @@
       try:
         func(repo_root)
         assert "Testing for %s, an exception wasn't thrown." % (message,)
-      except OSError, e:
+      except OSError as e:
         self.assertEqual(e.errno, errno.ENOENT)
         self.assertTrue(message in str(e),
                         msg="Couldn't find string %r in error message %r"
diff --git a/lib/cros_test_lib.py b/lib/cros_test_lib.py
index 00d228b..283864d 100644
--- a/lib/cros_test_lib.py
+++ b/lib/cros_test_lib.py
@@ -505,7 +505,7 @@
     try:
       functor(*args, **kwargs)
       raise AssertionError(msg)
-    except exception, e:
+    except exception as e:
       if exact_kls:
         self.assertEqual(e.__class__, exception)
       bad = []
@@ -1319,7 +1319,7 @@
   try:
     unittest.main(**kwds)
     raise SystemExit(0)
-  except SystemExit, e:
+  except SystemExit as e:
     if e.__class__ != SystemExit or allow_exit:
       raise
     # Redo the exit code ourselves- unittest throws True on occasion.
diff --git a/lib/git.py b/lib/git.py
index 1caa4ba..4f8b24b 100644
--- a/lib/git.py
+++ b/lib/git.py
@@ -211,7 +211,7 @@
   try:
     ret = RunGit(cwd, ['symbolic-ref', '-q', 'HEAD'])
     return StripRefsHeads(ret.output.strip(), False)
-  except cros_build_lib.RunCommandError, e:
+  except cros_build_lib.RunCommandError as e:
     if e.result.returncode != 1:
       raise
     return None
@@ -391,7 +391,7 @@
         with open(source, 'rb') as f:
           # pylint: disable=E1101
           return hashlib.md5(f.read()).hexdigest()
-      except EnvironmentError, e:
+      except EnvironmentError as e:
         if e.errno != errno.ENOENT or not ignore_missing:
           raise
     source.seek(0)
@@ -544,7 +544,7 @@
     path = os.path.join(root, '.repo', 'manifests.git')
     try:
       result = RunGit(path, ['config', '--get', 'manifest.groups'])
-    except cros_build_lib.RunCommandError, e:
+    except cros_build_lib.RunCommandError as e:
       if e.result.returncode == 1:
         # Value wasn't found, which is fine.
         return frozenset(['default'])
@@ -664,7 +664,7 @@
     result = RunGit(git_repo, ['config', '-f', '/dev/stdin', '--get',
                                'submit.mergeContent'], input=content.output)
     return result.output.strip().lower() == 'true'
-  except cros_build_lib.RunCommandError, e:
+  except cros_build_lib.RunCommandError as e:
     # If the field isn't set at all, exit code is 1.
     # Anything else is a bad invocation or an indecipherable state.
     if e.result.returncode != 1:
@@ -878,7 +878,7 @@
         return None
 
     return remote, revision
-  except EnvironmentError, e:
+  except EnvironmentError as e:
     if e.errno != errno.ENOENT:
       raise
   return None
@@ -1109,7 +1109,7 @@
     # Ensure the manifest knows of this checkout.
     if manifest.FindProjectFromPath(cwd):
       return manifest.manifest_branch
-  except EnvironmentError, e:
+  except EnvironmentError as e:
     if e.errno != errno.ENOENT:
       raise
 
diff --git a/lib/locking.py b/lib/locking.py
index 3ac2992..848f55c 100644
--- a/lib/locking.py
+++ b/lib/locking.py
@@ -48,7 +48,7 @@
     try:
       fcntl.lockf(self.fd, flags|fcntl.LOCK_NB)
       return
-    except EnvironmentError, e:
+    except EnvironmentError as e:
       if e.errno == errno.EDEADLOCK:
         self.unlock()
       elif e.errno != errno.EAGAIN:
@@ -59,7 +59,7 @@
       cros_build_lib.Info(message)
     try:
       fcntl.lockf(self.fd, flags)
-    except EnvironmentError, e:
+    except EnvironmentError as e:
       if e.errno != errno.EDEADLOCK:
         raise
       self.unlock()
diff --git a/lib/osutils.py b/lib/osutils.py
index 6bc5cd5..b9b5440 100644
--- a/lib/osutils.py
+++ b/lib/osutils.py
@@ -100,7 +100,7 @@
   try:
     os.unlink(path)
     return True
-  except EnvironmentError, e:
+  except EnvironmentError as e:
     if e.errno != errno.ENOENT:
       raise
   return False
@@ -132,7 +132,7 @@
   try:
     os.makedirs(path, mode)
     return True
-  except EnvironmentError, e:
+  except EnvironmentError as e:
     if e.errno != errno.EEXIST or not os.path.isdir(path):
       raise
 
@@ -152,7 +152,7 @@
           ['rm', '-r%s' % ('f' if ignore_missing else '',), '--', path],
           debug_level=logging.DEBUG,
           redirect_stdout=True, redirect_stderr=True)
-    except cros_build_lib.RunCommandError, e:
+    except cros_build_lib.RunCommandError as e:
       if not ignore_missing or os.path.exists(path):
         # If we're not ignoring the rm ENOENT equivalent, throw it;
         # if the pathway still exists, something failed, thus throw it.
@@ -160,7 +160,7 @@
   else:
     try:
       shutil.rmtree(path)
-    except EnvironmentError, e:
+    except EnvironmentError as e:
       if not ignore_missing or e.errno != errno.ENOENT:
         raise
 
@@ -298,7 +298,7 @@
   try:
     if tempdir is not None:
       RmDir(tempdir, ignore_missing=True, sudo=force_sudo)
-  except EnvironmentError, e:
+  except EnvironmentError as e:
     # Suppress ENOENT since we may be invoked
     # in a context where parallel wipes of the tempdir
     # may be occuring; primarily during hard shutdowns.
diff --git a/lib/patch.py b/lib/patch.py
index f0f8226..b8c3d44 100644
--- a/lib/patch.py
+++ b/lib/patch.py
@@ -586,7 +586,7 @@
     try:
       lines = git.RunGit(git_repo, ['diff', '--no-renames', '--name-status',
                                     '%s^..%s' % (self.sha1, self.sha1)])
-    except cros_build_lib.RunCommandError, e:
+    except cros_build_lib.RunCommandError as e:
       # If we get a 128, that means git couldn't find the the parent of our
       # sha1- meaning we're the first commit in the repository (there is no
       # parent).
@@ -621,7 +621,7 @@
       git.RunGit(git_repo, cmd)
       reset_target = None
       return
-    except cros_build_lib.RunCommandError, error:
+    except cros_build_lib.RunCommandError as error:
       ret = error.result.returncode
       if ret not in (1, 2):
         cros_build_lib.Error(
@@ -1310,7 +1310,7 @@
   for patch in patches:
     try:
       project, original_branch, ref, tracking_branch, tag = patch.split(':')
-    except ValueError, e:
+    except ValueError as e:
       raise ValueError(
           "Unexpected tryjob format.  You may be running an "
           "older version of chromite.  Run 'repo sync "
diff --git a/lib/rewrite_git_alternates.py b/lib/rewrite_git_alternates.py
index 6ad9a42..ceba76e 100755
--- a/lib/rewrite_git_alternates.py
+++ b/lib/rewrite_git_alternates.py
@@ -124,7 +124,7 @@
   try:
     if long(os.stat(cache_path).st_mtime) == manifest_time:
       return osutils.ReadFile(cache_path).split()
-  except EnvironmentError, e:
+  except EnvironmentError as e:
     if e.errno != errno.ENOENT:
       raise
 
diff --git a/lib/sudo.py b/lib/sudo.py
index 925e198..669b252 100644
--- a/lib/sudo.py
+++ b/lib/sudo.py
@@ -37,7 +37,7 @@
     for source in (sys.stdin, sys.stdout, sys.stderr):
       try:
         return os.ttyname(source.fileno())
-      except EnvironmentError, e:
+      except EnvironmentError as e:
         if e.errno not in (errno.EINVAL, errno.ENOTTY):
           raise
 
@@ -131,7 +131,7 @@
     try:
       self._proc.terminate()
       self._proc.wait()
-    except EnvironmentError, e:
+    except EnvironmentError as e:
       if e.errno != errno.ESRCH:
         raise
 
diff --git a/lib/tracker_access.py b/lib/tracker_access.py
index 3357bdb..418f512 100644
--- a/lib/tracker_access.py
+++ b/lib/tracker_access.py
@@ -84,7 +84,7 @@
     query = gdata.projecthosting.client.Query(issue_id=issue_id)
     try:
       feed = self._tracker_client.get_issues(project_name, query=query)
-    except gdata.client.RequestError, e:
+    except gdata.client.RequestError as e:
       if VERBOSE:
         print >> sys.stderr, "ERROR: Unable to access bug %s:%s: %s" % (
             project_name, issue_id, str(e))
diff --git a/license-generation/licenses.py b/license-generation/licenses.py
index 02479f8..a74b04a 100755
--- a/license-generation/licenses.py
+++ b/license-generation/licenses.py
@@ -788,7 +788,7 @@
       try:
         pkg.GetLicenses(package_name)
         self.packages[package_name] = pkg
-      except PackageSkipped, e:
+      except PackageSkipped as e:
         logging.info(e)
       except PackageLicenseError:
         self.incomplete_packages += [pkg.fullnamerev]
diff --git a/scripts/cros_portage_upgrade_unittest.py b/scripts/cros_portage_upgrade_unittest.py
index e1c5bfd..5ef8c84 100755
--- a/scripts/cros_portage_upgrade_unittest.py
+++ b/scripts/cros_portage_upgrade_unittest.py
@@ -3574,7 +3574,7 @@
     """
     try:
       cpu.main(args)
-    except exceptions.SystemExit, e:
+    except exceptions.SystemExit as e:
       if expect_zero:
         self.assertEquals(e.args[0], 0,
                           msg='expected call to main() to exit cleanly, '
@@ -3591,7 +3591,7 @@
       # Running with --help should exit with code==0
       try:
         cpu.main(['--help'])
-      except exceptions.SystemExit, e:
+      except exceptions.SystemExit as e:
         self.assertEquals(e.args[0], 0)
 
     # Verify that a message beginning with "Usage: " was printed
@@ -3604,7 +3604,7 @@
       # Running without --board should exit with code!=0
       try:
         cpu.main([])
-      except exceptions.SystemExit, e:
+      except exceptions.SystemExit as e:
         self.assertNotEquals(e.args[0], 0)
 
     # Verify that an error message was printed.
diff --git a/scripts/merge_package_status_unittest.py b/scripts/merge_package_status_unittest.py
index 23cd2b2..8cdccd7 100644
--- a/scripts/merge_package_status_unittest.py
+++ b/scripts/merge_package_status_unittest.py
@@ -227,7 +227,7 @@
       # Running with --help should exit with code==0
       try:
         mps.main(['--help'])
-      except exceptions.SystemExit, e:
+      except exceptions.SystemExit as e:
         self.assertEquals(e.args[0], 0)
 
     # Verify that a message beginning with "Usage: " was printed
@@ -242,7 +242,7 @@
       # Running without --out should exit with code!=0
       try:
         mps.main([])
-      except exceptions.SystemExit, e:
+      except exceptions.SystemExit as e:
         self.assertNotEquals(e.args[0], 0)
 
     # Verify that output ends in error.
@@ -254,7 +254,7 @@
       # Running without a package should exit with code!=0
       try:
         mps.main(['--out=any-out'])
-      except exceptions.SystemExit, e:
+      except exceptions.SystemExit as e:
         self.assertNotEquals(e.args[0], 0)
 
     # Verify that output ends in error.
diff --git a/scripts/upload_package_status_unittest.py b/scripts/upload_package_status_unittest.py
index 5901cee..097486d 100644
--- a/scripts/upload_package_status_unittest.py
+++ b/scripts/upload_package_status_unittest.py
@@ -346,7 +346,7 @@
       # Running with --help should exit with code==0
       try:
         ups.main(['--help'])
-      except exceptions.SystemExit, e:
+      except exceptions.SystemExit as e:
         self.assertEquals(e.args[0], 0)
 
     # Verify that a message beginning with "Usage: " was printed
@@ -359,7 +359,7 @@
       # Running without a package should exit with code!=0
       try:
         ups.main([])
-      except exceptions.SystemExit, e:
+      except exceptions.SystemExit as e:
         self.assertNotEquals(e.args[0], 0)
 
     self.AssertOutputEndsInError(check_stdout=True)
