From: Guido van Rossum Date: Mon, 15 Apr 2002 00:19:12 +0000 (+0000) Subject: Provisional fix for writefile() [SF bug # 541730]. X-Git-Tag: v2.3c1~5970 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f90d5292298cbaa114c4a1d000e7d8e946ca65b3;p=thirdparty%2FPython%2Fcpython.git Provisional fix for writefile() [SF bug # 541730]. The problem was that an exception can occur in the text.get() call or in the write() call, when the text buffer contains non-ASCII characters. This causes the previous contents of the file to be lost. The provisional fix is to call str(self.text.get(...)) *before* opening the file, so that if the exception occurs, we never open the file. Two orthogonal better solutions have to wait for policy decisions: 1. We could try to encode the data as Latin-1 or as UTF-8; but that would require IDLE to grow a notion of file encoding which requires more thought. 2. We could make backups before overwriting a file. This requires more thought because it needs to be fast and cross-platform and configurable. --- diff --git a/Tools/idle/IOBinding.py b/Tools/idle/IOBinding.py index dfea0b6618b1..db9fbd36afa3 100644 --- a/Tools/idle/IOBinding.py +++ b/Tools/idle/IOBinding.py @@ -148,9 +148,9 @@ class IOBinding: def writefile(self, filename): self.fixlastline() + chars = str(self.text.get("1.0", "end-1c")) try: f = open(filename, "w") - chars = self.text.get("1.0", "end-1c") f.write(chars) f.close() ## print "saved to", `filename`