bpo-30109: Fix reindent.py (GH-1207)
Skip the file if it has bad encoding.
diff --git a/Lib/test/test_tools/test_reindent.py b/Lib/test/test_tools/test_reindent.py
index d7c20e1..34df0c5 100644
--- a/Lib/test/test_tools/test_reindent.py
+++ b/Lib/test/test_tools/test_reindent.py
@@ -7,6 +7,7 @@
import os
import unittest
from test.support.script_helper import assert_python_ok
+from test.support import findfile
from test.test_tools import scriptsdir, skip_if_missing
@@ -23,6 +24,12 @@
self.assertEqual(out, b'')
self.assertGreater(err, b'')
+ def test_reindent_file_with_bad_encoding(self):
+ bad_coding_path = findfile('bad_coding.py')
+ rc, out, err = assert_python_ok(self.script, '-r', bad_coding_path)
+ self.assertEqual(out, b'')
+ self.assertNotEqual(err, b'')
+
if __name__ == '__main__':
unittest.main()
diff --git a/Tools/scripts/reindent.py b/Tools/scripts/reindent.py
index 18424de..f6dadaa 100755
--- a/Tools/scripts/reindent.py
+++ b/Tools/scripts/reindent.py
@@ -118,7 +118,11 @@
if verbose:
print("checking", file, "...", end=' ')
with open(file, 'rb') as f:
- encoding, _ = tokenize.detect_encoding(f.readline)
+ try:
+ encoding, _ = tokenize.detect_encoding(f.readline)
+ except SyntaxError as se:
+ errprint("%s: SyntaxError: %s" % (file, str(se)))
+ return
try:
with open(file, encoding=encoding) as f:
r = Reindenter(f)