You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
"Print window" menu on IDLE aborts whole application #56483
On Windows, IDLE closes all open windows and exits completely, without any error message, when selecting the "Print window" menu command.
Starting IDLE from inside a console, one can see the error message:
Exception in Tkinter callback
Traceback (most recent call last):
File "D:\apps\python32\lib\tkinter\__init__.py", line 1399, in __call__returnself.func(*args)
File "D:\apps\python32\lib\idlelib\IOBinding.py", line 453, in print_window
command = idleConf.GetOption('main','General','print-command-win')
File "D:\apps\python32\lib\idlelib\configHandler.py", line 245, in GetOptiontype=type, raw=raw)
File "D:\apps\python32\lib\idlelib\configHandler.py", line 54, in Getreturnself.get(section, option, raw=raw)
File "D:\apps\python32\lib\configparser.py", line 789, in get
d)
File "D:\apps\python32\lib\configparser.py", line 391, in before_getself._interpolate_some(parser, option, L, value, section, defaults, 1)
File "D:\apps\python32\lib\configparser.py", line 440, in _interpolate_some"found: %r"% (rest,))
configparser.InterpolationSyntaxError: '%' must be followed by '%' or '(', found
: '%s'
It is trying to read this entry from the config-main.def file:
For a ConfigParser file, those %s should be %%s instead. Previous IDLE versions (2.7 and 3.1) read the same entry without problem; I suspect they were using a RawConfigParser or processing the entry in a different way.
As a workaround, replacing %s with %%s in config-main.def is enough, until the code gets fixed.
In 3.2 configparser started validating syntax in interpolation-aware parsers by default. I fixed the configuration.
It's unfortunate this configuration error hasn't been caught before in testing. We need a unit test for broken configuration and a change in IDLE so that it doesn't silently crash when configuration is invalid.
BreamoreBoy commented on Jun 8, 2014
BreamoreBoymannequin
Mannequin
More actions
Can this be closed as a patch has been committed and the unittest framework was created on bpo-15392 ?
This issue needs a unittest test added within the framework. I opened bpo-21696 as a dependency. Since configx.def files can be edited, and, I believe, at least one is intended to be edited, configHandler should perhaps catch exceptions and display in a messagebox. But unless Idle could continue after that, that might wait for the general fix, which is another issue.
Activity
ggenellina commentedon Jun 7, 2011
On Windows, IDLE closes all open windows and exits completely, without any error message, when selecting the "Print window" menu command.
Starting IDLE from inside a console, one can see the error message:
It is trying to read this entry from the config-main.def file:
[General]
print-command-posix=lpr %s
print-command-win=start /min notepad /p %s
For a ConfigParser file, those %s should be %%s instead. Previous IDLE versions (2.7 and 3.1) read the same entry without problem; I suspect they were using a RawConfigParser or processing the entry in a different way.
As a workaround, replacing %s with %%s in config-main.def is enough, until the code gets fixed.
ggenellina commentedon Jun 7, 2011
Note: There is a much bigger problem here: IDLE should not abort abruptly in such cases, without any error indication.
python-dev commentedon Jun 7, 2011
New changeset 0aa3064d1cef by Łukasz Langa in branch '3.2':
bpo-12274: use proper escaping for % in IDLE config.
http://hg.python.org/cpython/rev/0aa3064d1cef
New changeset b410d013e7a8 by Łukasz Langa in branch 'default':
bpo-12274: use proper escaping for % in IDLE config (merged from 3.2).
http://hg.python.org/cpython/rev/b410d013e7a8
ambv commentedon Jun 7, 2011
In 3.2 configparser started validating syntax in interpolation-aware parsers by default. I fixed the configuration.
It's unfortunate this configuration error hasn't been caught before in testing. We need a unit test for broken configuration and a change in IDLE so that it doesn't silently crash when configuration is invalid.
BreamoreBoy commentedon Jun 8, 2014
Can this be closed as a patch has been committed and the unittest framework was created on bpo-15392 ?
terryjreedy commentedon Jun 8, 2014
This issue needs a unittest test added within the framework. I opened bpo-21696 as a dependency. Since configx.def files can be edited, and, I believe, at least one is intended to be edited, configHandler should perhaps catch exceptions and display in a messagebox. But unless Idle could continue after that, that might wait for the general fix, which is another issue.
terryjreedy commentedon Oct 2, 2014
Closing since the immediate problem has been fixed and there is a reference to this in bpo-21696