[issue44259] lib2to3 does not accept "exec" as name

Mulugruntz report at bugs.python.org
Fri May 28 06:19:27 EDT 2021


New submission from Mulugruntz <mulugruntz at gmail.com>:

I was trying to use https://github.com/NiklasRosenstein/pydoc-markdown to generate some doc for https://github.com/Mulugruntz/aiosubprocess

It was failing and for a while I thought I was doing something wrong. But when I did dig deeper, I realized that it was failing because I has a method named "exec".

The reason why I want to use "exec" is to make it obvious whether I'm executing the subprocess in shell mode or not (there's also a "shell" method).

As we can see here https://docs.python.org/3.9/reference/lexical_analysis.html#keywords

"exec" is not reserved.

Moreover, it's pretty counterintuitive that the code parses and runs correctly (cpython 3.9.5) but the lib2to3 parser crashes.

See below a working example:

```python
from lib2to3 import pygram, pytree
from lib2to3.pgen2 import driver
from lib2to3.pgen2.parse import ParseError

grammar = pygram.python_grammar.copy()
driver = driver.Driver(grammar, convert=pytree.convert)

strings = [
    "def fname(): pass",
    "def exec(): pass",
    """
class C:
    def exec(self): pass""",
]

for s in strings:
    try:
        driver.parse_string(s + '\n')
    except ParseError as pe:
        print("It fails:", s)
    else:
        print("It works:", s)

```

```shell
It works: def fname(): pass
It fails: def exec(): pass
It fails: 
class C:
    def exec(self): pass
```

----------
components: 2to3 (2.x to 3.x conversion tool)
messages: 394650
nosy: mulugruntz
priority: normal
severity: normal
status: open
title: lib2to3 does not accept "exec" as name
type: crash
versions: Python 3.9

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue44259>
_______________________________________


More information about the Python-bugs-list mailing list