[issue37824] IDLE: Handle Shell input warnings properly.
Cheryl Sabella
report at bugs.python.org
Mon May 25 18:41:46 EDT 2020
Cheryl Sabella <cheryl.sabella at gmail.com> added the comment:
Terry,
I put this into debug and found the reason it's printing the warning three times. In `codeop.py`, it's running `_maybe_compile` and there are three try statements:
```
def _maybe_compile(compiler, source, filename, symbol):
# Check for source consisting of only blank lines and comments
for line in source.split("\n"):
line = line.strip()
if line and line[0] != '#':
break # Leave it alone
else:
if symbol != "eval":
source = "pass" # Replace it with a 'pass' statement
err = err1 = err2 = None
code = code1 = code2 = None
try:
code = compiler(source, filename, symbol)
except SyntaxError:
pass
try:
code1 = compiler(source + "\n", filename, symbol)
except SyntaxError as e:
err1 = e
try:
code2 = compiler(source + "\n\n", filename, symbol)
except SyntaxError as e:
err2 = e
try:
if code:
return code
if not code1 and repr(err1) == repr(err2):
raise err1
finally:
err1 = err2 = None
```
It also has this in the module docstring:
```
Compile three times: as is, with \n, and with \n\n appended. If it
compiles as is, it's complete. If it compiles with one \n appended,
we expect more. If it doesn't compile either way, we compare the
error we get when compiling with \n or \n\n appended. If the errors
are the same, the code is broken. But if the errors are different, we
expect more. Not intuitive; not even guaranteed to hold in future
releases; but this matches the compiler's behavior from Python 1.4
through 2.2, at least.
```
----------
nosy: +cheryl.sabella
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue37824>
_______________________________________
More information about the Python-bugs-list
mailing list