Running the following program will lead to an unexpected EOF error. If we delete the space before triple-quotation mark("""), the error will gone. If we replace the content of snippet with "a = 1", the program will work well. However, if we replace the content of snippet with "if a:pass" in a single line, the program cause an error again. This is weird.
Spaces in the end of a statement should not affect the compilation of program in "single" mode. Besides, the error messages are different in Python2 and Python3. Indentation error are reported in Python 2 for snippet" if a:pass" while SyntaxError are reported in Python 3.
======================================================
import math
def check_stack_size( code):
# To assert that the alleged stack size is not O(N), we
# check that it is smaller than log(N).
if isinstance(code, str):
code = compile(code, "<foo>", "single")
max_size = math.ceil(math.log(len(code.co_code)))
# self.assertLessEqual(code.co_stacksize, max_size)
def test_if_else():
snippet ="""
if x:
a
elif y:
b
else:
c
"""
check_stack_size(snippet)
test_if_else()
=====================================================
Behavior in Python 3.10:
Traceback (most recent call last):
File "/home/xxm/Desktop/nameChanging/report/temp.py", line 30, in <module>
test_if_else()
File "/home/xxm/Desktop/nameChanging/report/temp.py", line 20, in test_if_else
check_stack_size(snippet)
File "/home/xxm/Desktop/nameChanging/report/temp.py", line 6, in check_stack_size
code = compile(code, "<foo>", "single")
File "<foo>", line 8
SyntaxError: unexpected EOF while parsing
Behaviors in Python2:
Traceback (most recent call last):
File "/home/xxm/Desktop/nameChanging/report/temp.py", line 30, in <module>
test_if_else()
File "/home/xxm/Desktop/nameChanging/report/temp.py", line 27, in test_if_else
check_stack_size(snippet)
File "/home/xxm/Desktop/nameChanging/report/temp.py", line 6, in check_stack_size
code = compile(code, "<foo>", "single")
File "<foo>", line 3
^
IndentationError: unexpected indent
|