diff --git a/Lib/test/support.py b/Lib/test/support.py
index 5f8b1ba..68791d5 100644
--- a/Lib/test/support.py
+++ b/Lib/test/support.py
@@ -344,6 +344,18 @@
     withcommas = ", ".join(reprpairs)
     return "{%s}" % withcommas
 
+def make_bad_fd():
+    """
+    Create an invalid file descriptor by opening and closing a file and return
+    its fd.
+    """
+    file = open(TESTFN, "wb")
+    try:
+        return file.fileno()
+    finally:
+        file.close()
+        unlink(TESTFN)
+
 def check_syntax_error(testcase, statement):
     try:
         compile(statement, '<test string>', 'exec')
diff --git a/Lib/test/test_fileio.py b/Lib/test/test_fileio.py
index 69aa3fd..497914f 100644
--- a/Lib/test/test_fileio.py
+++ b/Lib/test/test_fileio.py
@@ -6,7 +6,8 @@
 from array import array
 from weakref import proxy
 
-from test.support import TESTFN, findfile, check_warnings, run_unittest
+from test.support import (TESTFN, findfile, check_warnings, run_unittest,
+                          make_bad_fd)
 from collections import UserList
 
 import _fileio
@@ -177,7 +178,7 @@
 
     def testInvalidFd(self):
         self.assertRaises(ValueError, _fileio._FileIO, -10)
-        self.assertRaises(OSError, _fileio._FileIO, 10)
+        self.assertRaises(OSError, _fileio._FileIO, make_bad_fd())
 
     def testBadModeArgument(self):
         # verify that we get a sensible error message for bad mode argument
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index a2e611f..baaf33a 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -594,55 +594,59 @@
     #We omit close because it doesn'r raise an exception on some platforms
     def get_single(f):
         def helper(self):
-            if  getattr(os, f, None):
-                self.assertRaises(OSError, getattr(os, f), 10)
+            if  hasattr(os, f):
+                self.check(getattr(os, f))
         return helper
     for f in singles:
         locals()["test_"+f] = get_single(f)
 
+    def check(self, f, *args):
+        self.assertRaises(OSError, f, support.make_bad_fd(), *args)
+
     def test_isatty(self):
         if hasattr(os, "isatty"):
-            self.assertEqual(os.isatty(10), False)
+            self.assertEqual(os.isatty(support.make_bad_fd()), False)
 
     def test_closerange(self):
         if hasattr(os, "closerange"):
-            self.assertEqual(os.closerange(10, 20), None)
+            fd = support.make_bad_fd()
+            self.assertEqual(os.closerange(fd, fd + 10), None)
 
     def test_dup2(self):
         if hasattr(os, "dup2"):
-            self.assertRaises(OSError, os.dup2, 10, 20)
+            self.check(os.dup2, 20)
 
     def test_fchmod(self):
         if hasattr(os, "fchmod"):
-            self.assertRaises(OSError, os.fchmod, 10, 0)
+            self.check(os.fchmod, 0)
 
     def test_fchown(self):
         if hasattr(os, "fchown"):
-            self.assertRaises(OSError, os.fchown, 10, -1, -1)
+            self.check(os.fchown, -1, -1)
 
     def test_fpathconf(self):
         if hasattr(os, "fpathconf"):
-            self.assertRaises(OSError, os.fpathconf, 10, "PC_NAME_MAX")
+            self.check(os.fpathconf, "PC_NAME_MAX")
 
     def test_ftruncate(self):
         if hasattr(os, "ftruncate"):
-            self.assertRaises(OSError, os.ftruncate, 10, 0)
+            self.check(os.ftruncate, 0)
 
     def test_lseek(self):
         if hasattr(os, "lseek"):
-            self.assertRaises(OSError, os.lseek, 10, 0, 0)
+            self.check(os.lseek, 0, 0)
 
     def test_read(self):
         if hasattr(os, "read"):
-            self.assertRaises(OSError, os.read, 10, 1)
+            self.check(os.read, 1)
 
     def test_tcsetpgrpt(self):
         if hasattr(os, "tcsetpgrp"):
-            self.assertRaises(OSError, os.tcsetpgrp, 10, 0)
+            self.check(os.tcsetpgrp, 0)
 
     def test_write(self):
         if hasattr(os, "write"):
-            self.assertRaises(OSError, os.write, 10, b" ")
+            self.check(os.write, b" ")
 
 if sys.platform != 'win32':
     class Win32ErrorTests(unittest.TestCase):
