簡體   English   中英

帶有正確語法的Python SyntaxError

[英]Python SyntaxError with a correct syntax

為什么這段代碼給我語法錯誤:

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

顯然語法是正確的。 1485以下可以正常工作。 在1496及更高版本中,我得到了一個內存錯誤。 我認為它應該引發MemoryError而不是SyntaxError。

解析器有限制,您正在達到它們。 http://bugs.python.org/issue1881了討論,但你設法補充足夠的not在那里運營商運行的解析器堆棧空間。

您可以通過嵌套列表達到相同的限制,請參見http://bugs.python.org/issue215555

>>> eval(100 * '[' + 100 * ']')
s_push: parser stack overflow
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
MemoryError

引用后一份報告:

有一個基於C堆棧的限制,因為解析器是遞歸下降的。

提供達到該限制的代碼也被視為語法錯誤; 例如1485, not連續的運算符是瘋狂的,因此不能被視為有效的Python。 :-)

在某些長度上出現EOF錯誤而不是MemoryError的原因僅是令牌生成器設法針對這些長度到達行尾(並發出EOF信號), 然后解析器堆棧溢出,而不是在標記分析器看到行尾之前,解析器堆棧溢出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM