Instantiate the OS-related exception as soon as we raise it, so that "except"
works properly.

PyErr_SetFromErrnoWithFilenameObject() was already fixed by the changeset
793c75177d28. This commit fixes PyErr_SetExcFromWindowsErrWithFilenameObject(),
used on Windows.
diff --git a/Lib/test/test_pep3151.py b/Lib/test/test_pep3151.py
index 3c52bc6..e327f42 100644
--- a/Lib/test/test_pep3151.py
+++ b/Lib/test/test_pep3151.py
@@ -80,12 +80,23 @@
         self.assertIs(type(e), SubOSError)
 
     def test_try_except(self):
+        filename = "some_hopefully_non_existing_file"
+
         # This checks that try .. except checks the concrete exception
         # (FileNotFoundError) and not the base type specified when
         # PyErr_SetFromErrnoWithFilenameObject was called.
         # (it is therefore deliberate that it doesn't use assertRaises)
         try:
-            open("some_hopefully_non_existing_file")
+            open(filename)
+        except FileNotFoundError:
+            pass
+        else:
+            self.fail("should have raised a FileNotFoundError")
+
+        # Another test for PyErr_SetExcFromWindowsErrWithFilenameObject()
+        self.assertFalse(os.path.exists(filename))
+        try:
+            os.unlink(filename)
         except FileNotFoundError:
             pass
         else: