diff --git a/Lib/calendar.py b/Lib/calendar.py
index ab14c7d..2e45e24 100644
--- a/Lib/calendar.py
+++ b/Lib/calendar.py
@@ -564,6 +564,10 @@
 firstweekday = c.getfirstweekday
 
 def setfirstweekday(firstweekday):
+    try:
+        firstweekday.__index__
+    except AttributeError:
+        raise IllegalWeekdayError(firstweekday)
     if not MONDAY <= firstweekday <= SUNDAY:
         raise IllegalWeekdayError(firstweekday)
     c.firstweekday = firstweekday
diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.py
index 8f8f4b2..717711c 100644
--- a/Lib/ctypes/test/test_callbacks.py
+++ b/Lib/ctypes/test/test_callbacks.py
@@ -132,7 +132,7 @@
         gc.collect()
         live = [x for x in gc.get_objects()
                 if isinstance(x, X)]
-        self.failUnlessEqual(len(live), 0)
+        self.assertEqual(len(live), 0)
 
 try:
     WINFUNCTYPE
@@ -164,7 +164,7 @@
         result = integrate(0.0, 1.0, CALLBACK(func), 10)
         diff = abs(result - 1./3.)
 
-        self.failUnless(diff < 0.01, "%s not less than 0.01" % diff)
+        self.assertTrue(diff < 0.01, "%s not less than 0.01" % diff)
 
 ################################################################
 
diff --git a/Lib/distutils/util.py b/Lib/distutils/util.py
index 90f68d8..e92bef1 100644
--- a/Lib/distutils/util.py
+++ b/Lib/distutils/util.py
@@ -405,7 +405,7 @@
 
     log.info(msg)
     if not dry_run:
-        apply(func, args)
+        func(*args)
 
 
 def strtobool (val):
diff --git a/Lib/io.py b/Lib/io.py
index 9013c58..40623d6 100644
--- a/Lib/io.py
+++ b/Lib/io.py
@@ -849,8 +849,8 @@
         if self.closed:
             raise ValueError("seek on closed file")
         try:
-            pos = pos.__index__()
-        except AttributeError as err:
+            pos.__index__
+        except AttributeError:
             raise TypeError("an integer is required") # from err
         if whence == 0:
             if pos < 0:
@@ -874,8 +874,13 @@
             raise ValueError("truncate on closed file")
         if pos is None:
             pos = self._pos
-        elif pos < 0:
-            raise ValueError("negative truncate position %r" % (pos,))
+        else:
+            try:
+                pos.__index__
+            except AttributeError:
+                raise TypeError("an integer is required")
+            if pos < 0:
+                raise ValueError("negative truncate position %r" % (pos,))
         del self._buffer[pos:]
         return pos
 
@@ -1752,6 +1757,10 @@
         if n is None:
             n = -1
         decoder = self._decoder or self._get_decoder()
+        try:
+            n.__index__
+        except AttributeError:
+            raise TypeError("an integer is required")
         if n < 0:
             # Read everything.
             result = (self._get_decoded_chars() +
diff --git a/Lib/warnings.py b/Lib/warnings.py
index 59011ca..a071aa1 100644
--- a/Lib/warnings.py
+++ b/Lib/warnings.py
@@ -29,7 +29,7 @@
         file.write(formatwarning(message, category, filename, lineno, line))
     except IOError:
         pass # the file (probably stderr) is invalid - this warning gets lost.
-# Keep a worrking version around in case the deprecation of the old API is
+# Keep a working version around in case the deprecation of the old API is
 # triggered.
 showwarning = _show_warning
 
