New submission from thautwarm <[email protected]>:
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 <[email protected]>
<https://bugs.python.org/issue35001>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com