New submission from thautwarm <yaoxiansa...@gmail.com>:
This issue is found from a type hinting problem: ``` class ImportFrom(stmt): class ImportFrom(stmt): module = ... # type: Optional[_identifier] module = ... # type: Optional[_identifier] names = ... # type: typing.List[alias] names = ... # type: typing.List[alias] level = ... # type: Optional[int] ``` As we can see that `level` here is optional, and it's strange. I tried `ast.parse` on both Python 3.5/3.6, and found that None of `from a import *`, `from .a import *`, `from ..a import *` and other regular cases result into an ImportFrom AST whose `level` is None. Then I went to Python-asdl: https://github.com/python/cpython/blob/137b0632dccb992ca11e9445142fb33a29c33a51/Parser/Python.asdl#L44 and got ImportFrom(identifier? module, alias* names, int? level) It seems like a bug. To validate it, I went to https://github.com/python/cpython/blob/97cf0828727ac2a269c89c5aa09570a69a22c83c/Python/ast.c#L3311 and got static stmt_ty ast_for_import_stmt(struct compiling *c, const node *n){ int idx, ndots = 0; ... return ImportFrom(modname, aliases, ndots, lineno, col_offset, c->c_arena); ... } It seems that no reason for `level` being None. If it's really a bug, IMO it could be also an example that type hinting helps to error detection :-) ---------- assignee: docs@python components: Documentation messages: 327840 nosy: docs@python, thautwarm priority: normal severity: normal status: open title: ImportFrom level cannot be optional type: enhancement versions: Python 3.6, Python 3.7, Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue35001> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com