diff --git a/Lib/uu.py b/Lib/uu.py
index da89f72..ea58f3d 100755
--- a/Lib/uu.py
+++ b/Lib/uu.py
@@ -44,40 +44,47 @@
     #
     # If in_file is a pathname open it and change defaults
     #
-    if in_file == '-':
-        in_file = sys.stdin
-    elif isinstance(in_file, basestring):
+    opened_files = []
+    try:
+        if in_file == '-':
+            in_file = sys.stdin
+        elif isinstance(in_file, basestring):
+            if name is None:
+                name = os.path.basename(in_file)
+            if mode is None:
+                try:
+                    mode = os.stat(in_file).st_mode
+                except AttributeError:
+                    pass
+            in_file = open(in_file, 'rb')
+            opened_files.append(in_file)
+        #
+        # Open out_file if it is a pathname
+        #
+        if out_file == '-':
+            out_file = sys.stdout
+        elif isinstance(out_file, basestring):
+            out_file = open(out_file, 'wb')
+            opened_files.append(out_file)
+        #
+        # Set defaults for name and mode
+        #
         if name is None:
-            name = os.path.basename(in_file)
+            name = '-'
         if mode is None:
-            try:
-                mode = os.stat(in_file).st_mode
-            except AttributeError:
-                pass
-        in_file = open(in_file, 'rb')
-    #
-    # Open out_file if it is a pathname
-    #
-    if out_file == '-':
-        out_file = sys.stdout
-    elif isinstance(out_file, basestring):
-        out_file = open(out_file, 'w')
-    #
-    # Set defaults for name and mode
-    #
-    if name is None:
-        name = '-'
-    if mode is None:
-        mode = 0666
-    #
-    # Write the data
-    #
-    out_file.write('begin %o %s\n' % ((mode&0777),name))
-    data = in_file.read(45)
-    while len(data) > 0:
-        out_file.write(binascii.b2a_uu(data))
+            mode = 0666
+        #
+        # Write the data
+        #
+        out_file.write('begin %o %s\n' % ((mode&0777),name))
         data = in_file.read(45)
-    out_file.write(' \nend\n')
+        while len(data) > 0:
+            out_file.write(binascii.b2a_uu(data))
+            data = in_file.read(45)
+        out_file.write(' \nend\n')
+    finally:
+        for f in opened_files:
+            f.close()
 
 
 def decode(in_file, out_file=None, mode=None, quiet=0):
