Почему «попытка относительного импорта за пределы пакета верхнего уровня» ValueError, а не ImportError? - PullRequest
2 голосов
/ 07 марта 2019

Когда я делаю относительный импорт за пределы пакета верхнего уровня, я получаю исключение - нет ничего удивительного.Но почему это ValueError, а не ImportError?

$ find .
.
./b
./b/c.py
./b/__init__.py
./a.py
$ cat a.py
import b.c
$ cat b/c.py
from .. import time_machine
$ python a.py
Traceback (most recent call last):
  File "a.py", line 1, in <module>
    import b.c
  File "/tmp/a/b/c.py", line 1, in <module>
    from .. import time_machine
ValueError: Attempted relative import beyond toplevel package

Я бы ожидал ImportError, потому что это исключение связано с импортом пакетов и обычно дает ImportError (или его подкласс ModuleNotFoundError).Каково здесь обоснование?

...