Estaba usando el módulo integrado de keyword para obtener una lista de todas las palabras clave de la versión actual de Python. Y esto es lo que hice:
>>> import keyword >>> print(keyword.kwlist) ['False', 'None', 'True', '__peg_parser__', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] Y en la lista keyword.kwlist hay __peg_parser__ . Entonces, para ver lo que hace, __peg_parser__ en un intérprete de Python 3.9 en Windows (obtendrás el mismo resultado en Mac OS y Linux también), y esto es lo que se obtiene:
>>> __peg_parser__ File "<stdin>", line 1 __peg_parser__ ^ SyntaxError: You found it! Entonces mi pregunta es, ¿qué es __peg_parser__ y por qué obtengo SyntaxError: You found it! ?
Fue un huevo de Pascua relacionado con el lanzamiento del nuevo analizador PEG . El easter egg, junto con el antiguo analizador LL(1), se eliminará en 3.10 .
__peg_parser__ ?Es un huevo de Pascua en Python (del Peg Parser ) para cuando se lanzó el nuevo Peg Parser . Como se mencionó en esta discusión , se eliminará en Python 3.10.
Antes, el Easter Egg se llamaba __new_parser__ , pero se cambió a __peg_parser__ , para que sea una prueba futura, como se menciona en el mensaje :
new,exongno son realmente nombres a prueba de futuro. ¿Podemos cambiar el nombre de la palabra clave a__peg_parser__?
SyntaxError: You found it! ? SyntaxError: You found it! porque es parte del Easter Egg.
Dado que el analizador LL(1) será reemplazado por el nuevo Peg Parser , se eliminará en Python 3.10.
__peg_parser__ en versiones anteriores y posteriores de PythonNo existía en versiones anteriores de Python.
Python 3.8 y anteriores:
>>> __peg_parser__ Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name '__peg_parser__' is not definedPitón 3.9:
>>> __peg_parser__ File "<stdin>", line 1 __peg_parser__ ^ SyntaxError: You found it!Pitón 3.10:
>>> __peg_parser__ Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name '__peg_parser__' is not definedGuido publicó en github aquí para el nuevo analizador PEG.
También está en Python PEP .
Como menciona:
Este PEP propone reemplazar el analizador actual basado en LL(1) de CPython por un nuevo analizador basado en PEG. Este nuevo analizador permitiría la eliminación de múltiples "trucos" que existen en la gramática actual para eludir la limitación LL(1). Reduciría sustancialmente los costos de mantenimiento en algunas áreas relacionadas con la canalización de compilación, como la gramática, el analizador y la generación de AST. El nuevo analizador PEG también eliminará la restricción LL(1) en la gramática Python actual.
También se menciona en la página Novedades de Python 3.9 .
En Python 3.10, se eliminará el analizador LL(1) . Python 3.9 usa un nuevo analizador, basado en PEG en lugar de LL(1).
En Python 3.6, no está definido:
>>> __peg_parser__ Traceback (most recent call last): File "<pyshell#13>", line 1, in <module> __peg_parser__ NameError: name '__peg_parser__' is not defined >>>Este PEP propone reemplazar el analizador actual basado en LL(1) de CPython por un nuevo analizador basado en PEG. Este nuevo analizador permitiría la eliminación de múltiples "trucos" que existen en la gramática actual para eludir la limitación LL(1). Reduciría sustancialmente los costos de mantenimiento en algunas áreas relacionadas con la canalización de compilación, como la gramática, el analizador y la generación de AST. El nuevo analizador PEG también eliminará la restricción LL(1) en la gramática Python actual.