diff --git a/Demo/pdist/cvslock.py b/Demo/pdist/cvslock.py
index a48c702..ffaa15e 100755
--- a/Demo/pdist/cvslock.py
+++ b/Demo/pdist/cvslock.py
@@ -131,7 +131,7 @@
                 return
             except os.error as msg:
                 self.lockdir = None
-                if msg[0] == EEXIST:
+                if msg.args[0] == EEXIST:
                     try:
                         st = os.stat(self.cvslck)
                     except os.error:
diff --git a/Demo/scripts/toaiff.py b/Demo/scripts/toaiff.py
index 5794859..0e9be23 100644
--- a/Demo/scripts/toaiff.py
+++ b/Demo/scripts/toaiff.py
@@ -89,8 +89,8 @@
             ftype = ftype[0] # All we're interested in
     except IOError as msg:
         if type(msg) == type(()) and len(msg) == 2 and \
-                type(msg[0]) == type(0) and type(msg[1]) == type(''):
-            msg = msg[1]
+                type(msg.args[0]) == type(0) and type(msg.args[1]) == type(''):
+            msg = msg.args[1]
         if type(msg) != type(''):
             msg = repr(msg)
         raise error(filename + ': ' + msg)
diff --git a/Lib/distutils/file_util.py b/Lib/distutils/file_util.py
index e29e90e..6919060 100644
--- a/Lib/distutils/file_util.py
+++ b/Lib/distutils/file_util.py
@@ -139,7 +139,7 @@
             macostools.copy(src, dst, 0, preserve_times)
         except os.error as exc:
             raise DistutilsFileError(
-                  "could not copy '%s' to '%s': %s" % (src, dst, exc[-1]))
+                  "could not copy '%s' to '%s': %s" % (src, dst, exc.args[-1]))
 
     # If linking (hard or symbolic), use the appropriate system call
     # (Unix only, of course, but that's the caller's responsibility)
diff --git a/Lib/distutils/spawn.py b/Lib/distutils/spawn.py
index 0aee2bc..4c536d2 100644
--- a/Lib/distutils/spawn.py
+++ b/Lib/distutils/spawn.py
@@ -67,7 +67,7 @@
         except OSError as exc:
             # this seems to happen when the command isn't found
             raise DistutilsExecError(
-                  "command '%s' failed: %s" % (cmd[0], exc[-1]))
+                  "command '%s' failed: %s" % (cmd[0], exc.args[-1]))
         if rc != 0:
             # and this reflects the command running but failing
             raise DistutilsExecError(
@@ -88,7 +88,7 @@
         except OSError as exc:
             # this seems to happen when the command isn't found
             raise DistutilsExecError(
-                  "command '%s' failed: %s" % (cmd[0], exc[-1]))
+                  "command '%s' failed: %s" % (cmd[0], exc.args[-1]))
         if rc != 0:
             # and this reflects the command running but failing
             print("command '%s' failed with exit status %d" % (cmd[0], rc))
@@ -124,7 +124,7 @@
                 if exc.errno == errno.EINTR:
                     continue
                 raise DistutilsExecError(
-                      "command '%s' failed: %s" % (cmd[0], exc[-1]))
+                      "command '%s' failed: %s" % (cmd[0], exc.args[-1]))
             if os.WIFSIGNALED(status):
                 raise DistutilsExecError(
                       "command '%s' terminated by signal %d"
diff --git a/Lib/filecmp.py b/Lib/filecmp.py
index 1f599ce..12ba3ef 100644
--- a/Lib/filecmp.py
+++ b/Lib/filecmp.py
@@ -149,12 +149,12 @@
             try:
                 a_stat = os.stat(a_path)
             except os.error as why:
-                # print 'Can\'t stat', a_path, ':', why[1]
+                # print('Can\'t stat', a_path, ':', why.args[1])
                 ok = 0
             try:
                 b_stat = os.stat(b_path)
             except os.error as why:
-                # print 'Can\'t stat', b_path, ':', why[1]
+                # print('Can\'t stat', b_path, ':', why.args[1])
                 ok = 0
 
             if ok:
diff --git a/Lib/plat-mac/EasyDialogs.py b/Lib/plat-mac/EasyDialogs.py
index 2f0e3d3..68beafa 100644
--- a/Lib/plat-mac/EasyDialogs.py
+++ b/Lib/plat-mac/EasyDialogs.py
@@ -651,7 +651,7 @@
         rr = Nav.NavChooseFile(args)
         good = 1
     except Nav.error as arg:
-        if arg[0] != -128: # userCancelledErr
+        if arg.args[0] != -128: # userCancelledErr
             raise Nav.error(arg)
         return None
     if not rr.validRecord or not rr.selection:
@@ -704,7 +704,7 @@
         rr = Nav.NavPutFile(args)
         good = 1
     except Nav.error as arg:
-        if arg[0] != -128: # userCancelledErr
+        if arg.args[0] != -128: # userCancelledErr
             raise Nav.error(arg)
         return None
     if not rr.validRecord or not rr.selection:
@@ -764,7 +764,7 @@
         rr = Nav.NavChooseFolder(args)
         good = 1
     except Nav.error as arg:
-        if arg[0] != -128: # userCancelledErr
+        if arg.args[0] != -128: # userCancelledErr
             raise Nav.error(arg)
         return None
     if not rr.validRecord or not rr.selection:
diff --git a/Lib/plat-mac/aetools.py b/Lib/plat-mac/aetools.py
index dd06e3e..7ba5074 100644
--- a/Lib/plat-mac/aetools.py
+++ b/Lib/plat-mac/aetools.py
@@ -86,7 +86,7 @@
         try:
             desc = ae.AEGetAttributeDesc(key, '****')
         except (AE.Error, MacOS.Error) as msg:
-            if msg[0] != -1701 and msg[0] != -1704:
+            if msg.args[0] not in (-1701, -1704):
                 raise
             continue
         attributes[key] = unpack(desc, formodulename)
diff --git a/Lib/plat-mac/gensuitemodule.py b/Lib/plat-mac/gensuitemodule.py
index 1864f4f..9d4df6d 100644
--- a/Lib/plat-mac/gensuitemodule.py
+++ b/Lib/plat-mac/gensuitemodule.py
@@ -191,7 +191,7 @@
     try:
         aedescobj, launched = OSATerminology.GetAppTerminology(fullname)
     except MacOS.Error as arg:
-        if arg[0] in (-1701, -192): # errAEDescNotFound, resNotFound
+        if arg.args[0] in (-1701, -192): # errAEDescNotFound, resNotFound
             if verbose:
                 print("GetAppTerminology failed with errAEDescNotFound/resNotFound, trying manually", file=verbose)
             aedata, sig = getappterminology(fullname, verbose=verbose)
diff --git a/Lib/plat-mac/terminalcommand.py b/Lib/plat-mac/terminalcommand.py
index a2f008c..da1c28a 100644
--- a/Lib/plat-mac/terminalcommand.py
+++ b/Lib/plat-mac/terminalcommand.py
@@ -36,7 +36,7 @@
     try:
         theEvent.AESend(SEND_MODE, kAENormalPriority, kAEDefaultTimeout)
     except AE.Error as why:
-        if why[0] != -600:  # Terminal.app not yet running
+        if why.args[0] != -600:  # Terminal.app not yet running
             raise
         os.system(START_TERMINAL)
         time.sleep(1)
