| msg191518 - (view) |
Author: Dennis Backhaus (dbackhaus) |
Date: 2013-06-20 14:40 |
| It just worked fine yesterday, but when I start IDLE (with and without trying to open a file at the same time) I get this error. Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/2.7/bin/idle", line 5, in main() File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/idlelib/PyShell.py", line 1560, in main shell.interp.runcommand(''.join(("print('", tkversionwarning, "')"))) AttributeError: 'NoneType' object has no attribute 'interp' |
|
|
| msg191523 - (view) |
Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) *  |
Date: 2013-06-20 14:55 |
| PyShell.py, line 1541: if shell and cmd or script: Does it need parentheses? if shell and (cmd or script): |
|
|
| msg191539 - (view) |
Author: Ned Deily (ned.deily) *  |
Date: 2013-06-20 21:12 |
| The problem here occurs when IDLE on OS X is launched without an initial shell window, either by setting the option in IDLE preferences or from the command line (/usr/local/bin/idle -e) *and* IDLE detects that the version of Tk in use is one of the suspect OS X versions and is attempting to warn the user with this message in the shell window: WARNING: The version of Tcl/Tk (8.5.9) in use may be unstable. Visit http://www.python.org/download/mac/tcltk/ for current information. Unfortunately, that doesn't work if there is no shell window. The workaround is to follow the instructions at the above link and, if possible, install an up-to-date Tcl/Tk 8.5 from ActiveState. If that is not possible, then launch IDLE from the command line with an initial shell window: /usr/local/bin/idle2.7 -i and be sure to change the preference to always launch with a shell window. |
|
|
| msg191544 - (view) |
Author: Terry J. Reedy (terry.reedy) *  |
Date: 2013-06-21 00:18 |
| In 2.7.5, the offending line is 1558, not 1560. It is clearer to me as shell.interp.runcommand("print('%s')" % tkversionwarning) Amaury is correct about 1541, as seen in the if block itself, but I thing the shell test should be elevated to guard all the shell-dependend actions, not just this one. See below. To me, the problem in the cracked code and convoluted code is this: If enable_shell (1520), call open_shell to set both flist.shell and shell but return if shell is None. But then at 1532, shell is set to flist.shell, and that can only have effect if not enable_shell (as otherwise shell *is* flist.shell due to return if None). In this case I expect flist.shell will always be None (its backup default as 292). But anyway, 1532 should be at least become an else: block for 1520. The following lines up to 1558 all depend on shell not being None, but only one block is guarded. So I think they should all be guarded with one 'if shell:' and 'shell removed from 1541 2.7 patch attached. 3.3 code looks identical in this area, so it should have same problem and patch should apply to that also. |
|
|
| msg194229 - (view) |
Author: Ned Deily (ned.deily) *  |
Date: 2013-08-03 02:31 |
| Terry, your patch did not get attached. Do you still have it? |
|
|
| msg194235 - (view) |
Author: Terry J. Reedy (terry.reedy) *  |
Date: 2013-08-03 04:11 |
| No, but I recreated it from my description and attached it. But see next message. |
|
|
| msg194237 - (view) |
Author: Terry J. Reedy (terry.reedy) *  |
Date: 2013-08-03 04:40 |
| Looking further at handling debug, startup, cmd, or script options. When any of these are set, enable_shell is also, so to reach here, shell must be true, so only the MAC test, the subject of this issue, needs protection. Smaller patch (fewer lines changed) attached. --- Not part of this issue, but if someone can explain ...: This this bit under "if cmd or script:" puzzles me. shell.interp.runcommand("""if 1: import sys as _sys _sys.argv = %r del _sys \n""" % (sys.argv,)) Since the only lasting effect it can have is on the already imported sys module, it seems to be equivalent to sys.argv = "%r" % (sys.argv) And I do not know what net effect that has, if anything. |
|
|
| msg205873 - (view) |
Author: Roundup Robot (python-dev)  |
Date: 2013-12-11 00:33 |
| New changeset 5becf8b612ee by Ned Deily in branch '2.7': Issue #18270: Prevent possible IDLE AttributeError on OS X when no initial http://hg.python.org/cpython/rev/5becf8b612ee New changeset 016c64e66a9e by Ned Deily in branch '3.3': Issue #18270: Prevent possible IDLE AttributeError on OS X when no initial http://hg.python.org/cpython/rev/016c64e66a9e New changeset 9d1fb265b88a by Ned Deily in branch 'default': Issue #18270: merge from 3.3 http://hg.python.org/cpython/rev/9d1fb265b88a |
|
|
| msg205874 - (view) |
Author: Ned Deily (ned.deily) *  |
Date: 2013-12-11 00:56 |
| Thanks for the patch, Terry. I've pushed a slightly modified version for release in 2.7.7, 3.3.4, and 3.4.0. |
|
|