Terry J. Reedy added the comment:
>I think the next interesting question is to find out why an invalid home
>directory causes idle to not start up. There's no obvious reason why that
>should be the case in principle,
As Roger showed, IDLE will start up with an invalid home directory.
> so I suspect there's some error handling missing somewhere
Yes, the uncaught exception raised when attempting to display a non-essential
but user-useful messages (this is the third issue I know of about this). There
are 5 places in configHandler.py where a warning is directly printed to
sys.stderr. There are two similar writes in PyShell.py. The first warning is
the problem here, but any of them could be a problem and all should be handled
better.
Lib/idlelib\PyShell.py: 1357: sys.stderr.write("Error: %s\n" % str(msg))
Lib/idlelib\PyShell.py: 1358: sys.stderr.write(usage_msg)
Lib/idlelib\configHandler.py: 209: sys.stderr.write(warn)
Lib/idlelib\configHandler.py: 223: sys.stderr.write(warn)
Lib/idlelib\configHandler.py: 255: sys.stderr.write(warning)
Lib/idlelib\configHandler.py: 367: sys.stderr.write(warning)
Lib/idlelib\configHandler.py: 624: sys.stderr.write(warning)
Why are warning used instead of message boxes? Perhaps easier, perhaps the
latter are not available because the tk loop is not running. Possible solutions:
* Discard the message by just catching AttributeError (clikkeb) -- at each
place indicated above. This would be better than nothing, but only as a
temporary measure, and there is a better temporary measure below.
* Rearrange the start up process to make message boxes available, with default
configuraton, before the configuration process.
* Make a list of messages and display them when it must (on exit, if that is
possible with atexit) or in message boxes when it can.
* Solve the more general problem of writing to None by making sys.stdout and
sys.stderr not be None, #13582. At minimum, even as a temporary measure, use
something that just swallows output. Something like
import io
class DummyOut(io.IOBase):
def write(self, s):
return len(s)
dum = DummyOut()
print(dum.write('sixsix'))
# 6
----------
title: IDLE cannot connect to subprocess - New solution -> IDLE: closes when
writing warnings on Windows
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue14576>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com