mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	Merged revisions 80720 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r80720 | antoine.pitrou | 2010-05-03 18:25:33 +0200 (lun., 03 mai 2010) | 5 lines Issue #7865: The close() method of :mod:`io` objects should not swallow exceptions raised by the implicit flush(). Also ensure that calling close() several times is supported. Patch by Pascal Chambon. ........
This commit is contained in:
		
							parent
							
								
									fb7b668216
								
							
						
					
					
						commit
						6be8876623
					
				
					 7 changed files with 81 additions and 32 deletions
				
			
		
							
								
								
									
										22
									
								
								Lib/_pyio.py
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								Lib/_pyio.py
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -322,6 +322,7 @@ def flush(self) -> None:
 | 
			
		|||
 | 
			
		||||
        This is not implemented for read-only and non-blocking streams.
 | 
			
		||||
        """
 | 
			
		||||
        self._checkClosed()
 | 
			
		||||
        # XXX Should this return the number of bytes written???
 | 
			
		||||
 | 
			
		||||
    __closed = False
 | 
			
		||||
| 
						 | 
				
			
			@ -332,10 +333,7 @@ def close(self) -> None:
 | 
			
		|||
        This method has no effect if the file is already closed.
 | 
			
		||||
        """
 | 
			
		||||
        if not self.__closed:
 | 
			
		||||
            try:
 | 
			
		||||
                self.flush()
 | 
			
		||||
            except IOError:
 | 
			
		||||
                pass  # If flush() fails, just give up
 | 
			
		||||
            self.flush()
 | 
			
		||||
            self.__closed = True
 | 
			
		||||
 | 
			
		||||
    def __del__(self) -> None:
 | 
			
		||||
| 
						 | 
				
			
			@ -702,14 +700,13 @@ def truncate(self, pos=None):
 | 
			
		|||
    ### Flush and close ###
 | 
			
		||||
 | 
			
		||||
    def flush(self):
 | 
			
		||||
        if self.closed:
 | 
			
		||||
            raise ValueError("flush of closed file")
 | 
			
		||||
        self.raw.flush()
 | 
			
		||||
 | 
			
		||||
    def close(self):
 | 
			
		||||
        if not self.closed and self.raw is not None:
 | 
			
		||||
            try:
 | 
			
		||||
                self.flush()
 | 
			
		||||
            except IOError:
 | 
			
		||||
                pass  # If flush() fails, just give up
 | 
			
		||||
        if self.raw is not None and not self.closed:
 | 
			
		||||
            self.flush()
 | 
			
		||||
            self.raw.close()
 | 
			
		||||
 | 
			
		||||
    def detach(self):
 | 
			
		||||
| 
						 | 
				
			
			@ -1521,11 +1518,8 @@ def flush(self):
 | 
			
		|||
        self._telling = self._seekable
 | 
			
		||||
 | 
			
		||||
    def close(self):
 | 
			
		||||
        if self.buffer is not None:
 | 
			
		||||
            try:
 | 
			
		||||
                self.flush()
 | 
			
		||||
            except IOError:
 | 
			
		||||
                pass  # If flush() fails, just give up
 | 
			
		||||
        if self.buffer is not None and not self.closed:
 | 
			
		||||
            self.flush()
 | 
			
		||||
            self.buffer.close()
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue