Use string.ascii_letters instead of string.letters (SF bug #226706).
Move computation of sets of characters out of the body of the function that
uses them.
diff --git a/Tools/idle/PyShell.py b/Tools/idle/PyShell.py
index bd34d18..03b4684 100644
--- a/Tools/idle/PyShell.py
+++ b/Tools/idle/PyShell.py
@@ -36,6 +36,9 @@
 linecache.checkcache = linecache_checkcache
 
 
+IDENTCHARS = string.ascii_letters + string.digits + "_"
+
+
 # Note: <<newline-and-indent>> event is defined in AutoIndent.py
 
 #$ event <<plain-newline-and-indent>>
@@ -217,7 +220,7 @@
         text.tag_add("ERROR", pos)
         text.see(pos)
         char = text.get(pos)
-        if char and char in string.letters + string.digits + "_":
+        if char and char in IDENTCHARS:
             text.tag_add("ERROR", pos + " wordstart", pos)
         self.tkconsole.resetoutput()
         self.write("SyntaxError: %s\n" % str(msg))