Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
语法正确的Python SyntaxError_Python_Python 2.7_Syntax - Fatal编程技术网

语法正确的Python SyntaxError

语法正确的Python SyntaxError,python,python-2.7,syntax,Python,Python 2.7,Syntax,为什么这段代码会给我一个语法错误: eval(1485*'not ' + '1') 显然,语法是正确的。低于1485就可以了。在1496年及以上,我得到了一个内存错误。我认为它应该引起一个MemoryError,而不是SyntaxeError。解析器有限制,而您正遇到这些限制。有关讨论,请参阅,但您设法在其中添加了足够多的not运算符,以耗尽解析器堆栈空间 通过嵌套列表可以达到相同的限制,请参见: 引用后一份报告: 有一个基于C堆栈的限制,因为解析器是递归下降的 提供达到该限制的代码也被视为语

为什么这段代码会给我一个语法错误:

eval(1485*'not ' + '1')

显然,语法是正确的。低于1485就可以了。在1496年及以上,我得到了一个内存错误。我认为它应该引起一个MemoryError,而不是SyntaxeError。

解析器有限制,而您正遇到这些限制。有关讨论,请参阅,但您设法在其中添加了足够多的not运算符,以耗尽解析器堆栈空间

通过嵌套列表可以达到相同的限制,请参见:

引用后一份报告:

有一个基于C堆栈的限制,因为解析器是递归下降的

提供达到该限制的代码也被视为语法错误;e、 g.1485行中的not运算符是不合理的,不可能被认为是有效的Python:-


对于某些长度,您得到的是EOF错误而不是MemoryError,原因很简单,标记器设法到达行的末尾,并发出这些长度的EOF信号,然后解析器堆栈溢出,而不是语法分析器堆栈在标记器看到行的结尾之前溢出。

语法分析器有限制,而您正在命中它们。有关讨论,请参阅,但您设法在其中添加了足够多的not运算符,以耗尽解析器堆栈空间

通过嵌套列表可以达到相同的限制,请参见:

引用后一份报告:

有一个基于C堆栈的限制,因为解析器是递归下降的

提供达到该限制的代码也被视为语法错误;e、 g.1485行中的not运算符是不合理的,不可能被认为是有效的Python:-


对于某些长度,您得到的是EOF错误而不是MemoryError,原因很简单,标记器设法到达行的末尾,并发出这些长度的EOF信号,然后解析器堆栈溢出,而不是在标记器看到行尾之前解析器堆栈溢出。

eval1485*“not”+“1”在我的机器上运行良好,但我想我应该问:你想做什么?@RafaelBarros这是因为在你的情况下它只返回一个字符串。注意这里没有双引号。@RafaelBarros和user1269942,他正在生成一个在“1”前面有14895个NOT的字符串,然后对其求值。这是书面的,只是。。。荒谬。看看回溯中的第一行输出。原因很清楚:s_push:parser堆栈溢出。看起来你至少让解析器不知所措了,这是在我运行Python 2.7.8的Windows 7机器上的结果。@RafaelBarros只是作为一个很长的字符串进行求值,不是一回事。eval1485*'not'+'1'在我的机器上运行良好,但我想我应该问:你想做什么?@RafaelBarros这是因为在你的例子中,它只返回一个字符串。注意这里没有双引号。@RafaelBarros和user1269942,他正在生成一个在“1”前面有14895个NOT的字符串,然后对其求值。这是书面的,只是。。。荒谬。看看回溯中的第一行输出。原因很清楚:s_push:parser堆栈溢出。看起来你至少让解析器不知所措了,这是在我运行Python 2.7.8的Windows 7机器上的结果。@RafaelBarros只是作为一个很长的字符串求值,不是一回事。是的,但这并不能解释为什么1485到1496之间的值是SyntaxError,否则是MemoryError。@georg:内存错误也在解析器中被击中,又是因为堆栈空间不足,但更多的原因。@georg:再挖一点;解析器堆栈溢出始终是一个MemoryError,但是如果标记器在向解析器提供标记时已经看到了行的结尾,那么内存错误将被语法错误替换。是的,但这并不能解释为什么1485到1496之间的值是SyntaxError,而MemoryError则不然。@georg:语法分析器中也会出现内存错误,同样是由于堆栈空间不足,但更严重的是。@georg:再挖一点;解析器堆栈溢出始终是一个MemoryError,但是如果标记器在向解析器提供标记时已经看到了行的结尾,那么内存错误将被语法错误替换。
>>> eval(100 * '[' + 100 * ']')
s_push: parser stack overflow
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
MemoryError