New submission from Mulugruntz <mulugru...@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 <rep...@bugs.python.org> <https://bugs.python.org/issue44259> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com