I think that lines 207-210 of GetUserCfgDir should be modified like this:
try:
sys.stderr.write(warn)
except (IOError, AttributeError): # <----
pass #^^^^^^^^^^^^^^
because when you start IDLE via pythonw.exe (that sets sys.stderr to "None"),
the function call sys.stderr.write(warn) raises the following exception:
AttributeError: 'NoneType' object has no attribute 'write'
and IDLE stops running without displaying any exception error, because that
exception is unhandled.
There is a funcion call to sys.stderr.write also at line 222, just before a
"raise SystemExit" statement, which makes ininfluent the missing
AttributeError exception handling.