Преглед на файлове

reader and writer add closed property

zhzhenqin преди 9 години
родител
ревизия
689ee205a5
променени са 1 файла, в които са добавени 16 реда и са изтрити 6 реда
  1. 16 6
      python/IntHeaderProtobufFile.py

+ 16 - 6
python/IntHeaderProtobufFile.py

@@ -11,6 +11,9 @@ class Reader(object):
         self.protobufClass = protobufClass
         self.file = file
         self.f = open(self.file, "rb")
+    
+
+    closed = property(lambda self: self.f.closed)
 
     def __enter__(self):
         pass
@@ -21,7 +24,6 @@ class Reader(object):
     def next(self):
         header = self.f.read(4)
         if len(header) < 4:
-            self.__exit__(None, None, None)
             raise StopIteration()
         length = struct.unpack('>i', header)
         bytes = self.f.read(length[0])
@@ -31,15 +33,24 @@ class Reader(object):
     
     def __next__(self):
         self.next()
-            
-    def __exit__(self, exc_type, exc_val, exc_tb):
+    
+    def isclosed(self):
+        return self.f.closed
+    
+    def close(self):
         self.f.close()
 
+    def __exit__(self, exc_type, exc_val, exc_tb):
+        if not self.closed:
+            self.close()
+
 class Writer(object):
     
     def __init__(self, file):
         self.file = file
         self.f = open(self.file, "wb")
+    
+    closed = property(lambda self: self.f.closed)
 
     def __enter__(self):
         pass
@@ -66,10 +77,9 @@ class Writer(object):
     def isclosed(self):
         return self.f.closed
 
-    closed = property(isclosed)
-
     def __exit__(self, exc_type, exc_val, exc_tb):
-        self.close()
+        if not self.closed:
+            self.close()
 
 if __name__ == "__main__":
     pass